Unity3D
Unity

オブジェクトの回転角度から単位方向ベクトルを求める

オブジェクトの回転角度からオブジェクトの向いている方向を表す単位方向ベクトルを求める方法です。
つまり、角度からtranform.forwardのような向きを表す大きさ1のベクトルを求めたいわけです。
例えば、x軸周りに-45度、y軸周りに30度の角度から求めるには次のように書けばよいです。

var angles = new Vector3(-45, 30, 0);
var direction = Quaternion.Euler(angles) * Vector3.forward;

解説

原理としてはtransform.forwardが次のように求められているということがあります。

var forward = transform.rotation * Vector3.forward;

transform.rotationはそのオブジェクトの回転の4元数(Quaternion)なので、同様に4元数をかけてやればいいということがわかります。
ただ、実際に使う角度は3次元のオイラー角なのでQuaternion.Eulerで4元数に変換してあげる必要があるというわけです。

効用

例えば指定方向に移動させたいけど、その方向がオブジェクトの正面方向とは限らない(transform.forwardを使わない)場合に使えたりします。
正面に進みつつ任意の方向に弾を撃ちたい場合がそうです。

単に移動させるだけなら、

transform.position += direction * speed * Time.deltaTime;

とUpdateなどの中に書けばよいです。

任意の方向に速度を持たせたいなら

_rigidbody.velocity = direction * speed;

任意の方向に加速させたいなら

_rigidbody.AddForce(direction * thrust);

と書けばよいです。

※speed, thrustはfloat型の値です

参考

http://tsubakit1.hateblo.jp/entry/2014/08/02/030919