【Unity】動くプレイヤーの方向を滑らかな動きで向き続けるGameObjectの作り方
動くプレイヤー(ターゲット)の方向を滑らかにゆっくりと向き続けるGameObjectの作り方です。
Quaternion.Slerpを使います。
プレイヤーとしては以下を使います。
完成動作
作り方(動画)
作り方(ブログ)
1.シーンに各オブジェクトを配置
1-1.以下のようにunity-chan(今回はこれをプレイヤー)とBase(赤いCylinder)とNozzle(青いCylinder)を設置する。Baseが親、Nozzleが子のオブジェクトとなるようにする。
※今回はNozzleがunity-chanの方を向き続けるようにする。この後のスクリプトの便宜上、Nozzleは先端がZ軸を向くようにする。
流れとしてはBaseをスクリプトでプレイヤーの方向に回転させて、子であるNozzleも回転する仕組み
2.プレイヤー(ターゲット)の方向を向き続けるスクリプトを作成
2-1.Slerp.csという名前のスクリプトを作成して、以下のコードを記載する。
using UnityEngine;
public class Slerp : MonoBehaviour
{
[SerializeField]
[Tooltip("対象物(向く方向)")]
private GameObject target;
[SerializeField]
[Tooltip("対象物を向くまでのスピード[0-1](値が小さいほど向くまでのスピードが遅い")]
private float speed;
private void Update()
{
// 対象物と自分自身の座標からベクトルを算出してQuaternion(回転値)を取得
Vector3 vector3 = target.transform.position - this.transform.position;
// もし上下方向の回転はしないようにしたければ以下のようにする。
// vector3.y = 0f;
// Quaternion(回転値)を取得
Quaternion quaternion = Quaternion.LookRotation(vector3);
// 取得した回転値をこのゲームオブジェクトのrotationに代入
this.transform.rotation = Quaternion.Slerp(this.transform.rotation, quaternion, speed);
}
}
3.スクリプトをアタッチ
3-1.Slerpスクリプトをプレイヤー(ターゲット)の方向を滑らかに向き続けさせたいGameObject(今回はBaseオブジェクト)にアタッチ
4.Slerpスクリプトのプロパティの設定
4-1.SlerpスクリプトのTargetプロパティにプレイヤー(ターゲット)を設定(今回はunity-chan)
4-2.SlerpスクリプトのSpeedプロパティに0から1までの任意の値を設定(値が小さいほどターゲットの方を向くまでに時間がかかる。※0だとターゲットを追いかけない。)
今回は0.01を設定
完成
これでゲームをスタートしてプレイヤーが動くと、Baseが回転して、その子であるNozzleもプレイヤーの方に滑らかに回転して向き続ける。
ディスカッション
コメント一覧
まだ、コメントがありません