UnityのTransform.Translate関数には、じつはちょっと注意が必要です。 簡単に言うと、transform.Translate(Vector3.right)とtransform.position += Vector3.rightは異なるというお話です。
手順1
まず、原点に球体を用意します。
手順2
次にInspector上でPositionをX方向に+2移動させると、当然赤い球体のようになります。
手順3
Inspector上でRotationをY軸中心に90度回転させると、向きは変われど、位置は変わりません。 これは、手順2と手順3を入れ替えても同じ結果になります。
手順4
さて、ここでもう一つ緑の球体を用意させます。 Inspector上でRotationをY軸中心に90度回転させます。
手順5
さあ、ここでソース上で下記のようにTranslateさせてみましょう。
void Start () { transform.Translate(2.0f * Vector3.right); }
あれ、手順3と結果が異なりますね。 Translate関数は、ローカル座標系をベースとした関数であるということがわかります。 ちなみに、Position.Xは-2.384186e-07という値になっております。
手順6
ここでソースを下記のように変更してみます。
void Start () { //transform.Translate(2.0f * Vector3.right); transform.position += 2.0f * Vector3.right; }
結果は、
完全に手順3と一致しましたね。 こちらはInspectorでの操作と同じ結果ということですね。
同じだと勘違いされている方もいるようですので、ご注意あれ。
ゲーム作りのはじめかた Unityで覚える企画からレベルデザインまで
- 作者: あすなこうじ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2014/06/30
- メディア: 大型本
- この商品を含むブログ (4件) を見る