[Unity] 自身の向きベクトルを取得する

Unityを使い始めてから嵌ったことについてのメモです。

2Dゲームにおいて、キャラクター自身の向きに弾を発射したり移動したりしたい場面を想定します。
この場合、まず自分がどちらに向いているかを知る必要があります。

unity-dir

色々なサイト様を調べても向きベクトルを取得するサンプルが無かったので、試行錯誤で書いてみました。

using UnityEngine;
using System.Collections;

public class Shot : MonoBehaviour {
	private const float speed = 5.0f;

	// Update is called once per frame
	void Update () {
		// 自身の向きベクトル取得
		float angleDir = transform.eulerAngles.z * (Mathf.PI / 180.0f);
		Vector3 dir = new Vector3 (Mathf.Cos (angleDir), Mathf.Sin (angleDir), 0.0f);

		// 自身の向きに移動
		transform.position += dir * speed * Time.deltaTime;
	}
}

上記のソースは、自身の向きに向かって移動するキャラの動きを実装したものです。
Update()メソッドにて、自身の角度をラジアンで取得します。

float angleDir = transform.eulerAngles.z * (Mathf.PI / 180.0f);

取得したangleDirが自身の向きを角度で表現したものです。
角度はz軸周りのオイラー角から取得できます。

最終的に求めたい向きベクトルは、この角度から計算します。

Vector3 dir = new Vector3 (Mathf.Cos (angleDir), Mathf.Sin (angleDir), 0.0f);

他にもっと効率の良い方法があると思いますが、ひとまず上記の方法で実現できます。
Unityをもっと理解したら改めて記事を書き直したいと思います。

COMMENTS & TRACKBACKS

  • Comments ( 2 )
  • Trackbacks ( 0 )
  1. By あのあたり

    同じ所ではまっていたので、とても助かりました。
    NPCのコントロールはいろいろハマりポイントが多そうですね…
    制作応援しています。ありがとうございました。

    • By ftvoid

      >あのあたりさん

      コメントありがとうございます。
      今回の記事、ご参考にしていただけて大変光栄です。
      NPCを動かすときは、スクリプトであれこれしなきゃいけない場合が多くてなかなかに大変ですね。。
      制作応援ありがとうございます。こちらも応援したいと思います。