Unityで進行方向に対し、緩やかに回転させる方法をご紹介します。
Unityの回転方法は少しばかり複雑ですが、標準関数を使えば、意外とすんなりできたりします!
緩やかに進行方向へ回転させる際の注意点も添えてありますので、参考にしていただけますと幸いですm(_ _)m
回転させる前の注意点
オブジェクトの向きはz軸を正面、y軸を上にする
まず準備として、オブジェクトをz軸を正面、y軸を上に向くように設定しましょう。
Blenderといったモデリングツールでモデルをインポートする時などご注意ください!
モデルの原点を中心にする
モデルの原点を中心に設定しましょう。Blenderなどからモデルをインポートしたとき、原点がズレていると回転がおかしなことになります。
実際に原点がズレているモデルの回転が変になるGifがこちら!
この魚のモデリングの原点は実は尻尾と胴体の付け根にあります。
このようにUnity上では一見、原点が中心にあるように思えても、違う場合がございますのでご注意ください!(特にモデリングツールからインポートするとき)
回転方法
回転させるプログラムはこちらになります!
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
が大きくなればなるほど、回転速度が上がります。
最後に
進行方向へ回転させるのを一からやると、手間がかかるのですが、標準関数でできるのは有り難いですね!
参考にして頂けると嬉しいです!