LoginSignup
5
3

More than 5 years have passed since last update.

【Unity】オブジェクトを進行方向へ緩やかに回転させる方法【サンプルあり】

Posted at

Unityで進行方向に対し、緩やかに回転させる方法をご紹介します。

Unityの回転方法は少しばかり複雑ですが、標準関数を使えば、意外とすんなりできたりします!

緩やかに進行方向へ回転させる際の注意点も添えてありますので、参考にしていただけますと幸いですm(_ _)m

回転させる前の注意点

オブジェクトの向きはz軸を正面、y軸を上にする

まず準備として、オブジェクトをz軸を正面、y軸を上に向くように設定しましょう。
スクリーンショット_2019-02-12_13_58_50.png

Blenderといったモデリングツールでモデルをインポートする時などご注意ください!

モデルの原点を中心にする

モデルの原点を中心に設定しましょう。Blenderなどからモデルをインポートしたとき、原点がズレていると回転がおかしなことになります。

実際に原点がズレているモデルの回転が変になるGifがこちら!
fish_rotate.gif

この魚のモデリングの原点は実は尻尾と胴体の付け根にあります。

このようにUnity上では一見、原点が中心にあるように思えても、違う場合がございますのでご注意ください!(特にモデリングツールからインポートするとき)

回転方法

回転させるプログラムはこちらになります!

LookRotate.cs
using UnityEngine;

public class LookRotate : MonoBehaviour
{

    [Range(-1.0f, 1.0f)]
    public float RotateLookX = 0f;

    [Range(-1.0f, 1.0f)]
    public float RotateLookY = 0f;

    [Range(-1.0f, 1.0f)]
    public float RotateLookZ = 0f;

    [Range(0, 5.0f)]
    public float RotateSpeed = 1f;

    void Update()
    {

        Vector3 forward = new Vector3(RotateLookX, RotateLookY, RotateLookZ);
        Quaternion rot = Quaternion.LookRotation(forward);

        rot = Quaternion.Slerp(this.transform.rotation, rot, Time.deltaTime * RotateSpeed);
        this.transform.rotation = rot;
    }
}

簡単に解説すると、インスペクターから進行方向(ベクトル)をイジると、その方向に向くプログラムになります。
Quaternion.LookRotationだけでも、向いている方向へ回転してくれるのですが、一気に回転します。

緩やかに回転させたいときは、Quaternion.Slerpを使えばOKです!

ここでRotateSpeedが大きくなればなるほど、回転速度が上がります。

fish_rotate3.gif

最後に

進行方向へ回転させるのを一からやると、手間がかかるのですが、標準関数でできるのは有り難いですね!

参考にして頂けると嬉しいです!

参考URL

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3