21
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-17

オブジェクトの回転角度からオブジェクトの向いている方向を表す単位方向ベクトルを求める方法です。
つまり、角度から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型の値です

参考

21
13
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
21
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?