はとの豆知識

Unityを中心に手っ取り早い機能の実装を紹介します。

【Unity】プレイヤー、オブジェクトをスムーズに回転させる方法「transform.Rotate」の紹介

一気に向かせるのではなく、少しずつ回転させたい。
ずっと回転し続けるオブジェクトを作りたい。
なんか簡単に回転させたい。
そんな時に使える手段の一つとして「transform.Rotate」を紹介します。

手っ取り早い実装方法

    //回転の速度を設定
    private float rotateSpeed = 150f;
    //z軸で回転させたいのでzだけ1にする
    private Vector3 rotasionVector = new Vector3(0, 0, 1);

    private void Update()
    {
        /// Z軸で回転 * 回転速度 * Time.deltaTime
        transform.Rotate(rotasionVector * rotateSpeed * Time.deltaTime);
    }

とりあえず回転させたいオブジェクトに適用することで回り続けます


さらに前進処理などと合わせることによって下の画像のような挙動が可能です。
キーボードの矢印キーで方向転換ができるようになりました。

    private float moveSpeed = 2f;

    private float rotateSpeed = 150f;
    private Vector3 rotasionVector = new Vector3(0, 0, 1);

    private void Update()
    {
        //前進処理
        transform.Translate(Vector3.up * this.moveSpeed * Time.deltaTime);

        if (Input.GetKey(KeyCode.LeftArrow))
            transform.Rotate(rotasionVector * rotateSpeed * Time.deltaTime);
        if (Input.GetKey(KeyCode.RightArrow))/// rotateSpeedに-を付けて逆回転
            transform.Rotate(rotasionVector * -rotateSpeed * Time.deltaTime);
    }

f:id:HatoHatter:20210403021942g:plain

詳しい解説

「transform.Rotate」は現在の回転にVectorで指定した角度を追加する関数です。
なのでvoid Update()に書いた場合は回転し続けることになります。

回転を制御する処理の中でもかなり直感的に使用することができるので
オブジェクトを回転させたいな~ ➜ 「transform.Rotate」でokです

また、以前紹介した「transform.Translate」同様

        transform.Rotate(rotasionVector * rotateSpeed * Time.deltaTime , Space.World);

Space.Worldを指定してワールド座標で回転させる事も可能です。

まとめ

オブジェクトの回転にはクォータニオンオイラー角といった物が付きまとうのですが
今回は transform.Rotateという便利な機能があるんだな~くらいで大丈夫です。
興味がある方は調べてみてください。
私は過去にクォータニオンに付けられた傷が痛むのでこの辺で失礼します。