Unity3d vector3.forwardとtransform.forwardの違い!



Difference Between Unity3d Vector3



元の接続:

http://blog.csdn.net/kaluluosi111/article/details/17206655



unity3dには2つのフォワードがあります。1つはvector3.forwardとtransform.forwardで、2つのフォワードは実際には完全に異なります。それらの違いは、主に異なる座標系の反映に反映されます。





vector3のベクトルの性能を比較し、自己の座標系と世界の世界座標系で変換してみましょう。検証にはtransform.translate関数を使用します。

注:独自の座標! =世界座標は、2つの座標系が一致しないことを意味します。




自己の座標系-space.self

vector3.forward


transform.forward


私はここで混乱しています、なぜtransform.forwardがそれ自身の座標を回した後にそのような奇妙な結果をもたらすのか。




上の写真を終えて、ようやくわかりました。

自己の座標系の変換は次のようになります。

変換するベクトルをワールド軸を基準にしてターゲット軸に移動します。


transform.forwardで



したがって、ここにvector3.forwardとtransform.forwardの違いの要約があります。

vector3.forwardの値は、常に(0,0,1)に等しくなります。

transform.forwardの値は次のとおりです。現在のオブジェクト自体の座標系のz座標はワールド座標を指しているため、必ずしも(0,0,1)に等しいとは限りませんが、 マグニチュード 長さそれは1です

これが、transform.forwardが自分自身の座標系に変換されるときに発生する理由です。


世界の世界座標系space.worldでは、その逆が当てはまります。


したがって、オブジェクトを前方に移動する場合、transform.translate()とtransform.positionの直接変更の違いは非常に大きくなります。


transform.position自体がワールド座標です。

1、transform.position + = vector3.forward

これは、世界座標のz軸に等しくなります。

2、transform.position + = transform.forward

これは、オブジェクト自体の座標系のz軸の進みに等しくなります。


3、transform.translate(vector3.forward、space.self)

これは、独自の座標系のz軸の進みに等しくなります。

効果は2と同等です。

4、transform.translate(transform.forward、space.self)

上に表示される素晴らしい結果は、この使用法によって引き起こされます。この使用法を使用することは特別な必要ではありません。

5、transform.translate(vector3.forward、space.world)

これは、オブジェクトをワールド座標のz軸に沿って前進させることと同じです。

効果は1と同等です。

6、transform.translate(transform.forward、space.world)

これは、オブジェクトを「ワールド座標でのオブジェクト自体の座標z軸の方向」(z軸に沿ったオブジェクトに相当)に沿って前進させることと同じです。

効果は2と同等です。

転載:https://www.cnblogs.com/nsky/p/4608444.html