ローカル空間とワールド空間
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 19/67。
オブジェクトには、ワールドの向きだけでなく、独自の向きもあります。transform.forwardはオブジェクトの先端が向いている方向(UnityのSceneビューに表示される青い矢印)を表し、長さ1のワールドベクトルとして与えられます。transform.rightとtransform.upは、それぞれオブジェクト自身の右方向と上方向です。オブジェクトを回転させると、これらの向きも一緒に回転します。この紙飛行機はシーン内でy軸を中心に90度回転しているため、向いている方向に、ワールドのx軸に沿って飛びます。
public float speed = 4f;
void Update()
{
transform.position += transform.forward * speed * Time.deltaTime;
}transform.Translate(Vector3.forward * speed * Time.deltaTime)でも同じことができます。Translateは渡されたベクトルをオブジェクト自身の座標空間で解釈するためです。つまり、ここではVector3.forwardはオブジェクトの前方を意味します。2つ目の引数としてSpace.Worldを渡すと、代わりにワールドの軸が使われるため、transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World)は飛行機がどちらを向いていても、ワールドのz軸に沿って移動します。
transform.Rotateもオブジェクト自身の軸を中心に回転させます。上から見ると、y軸を中心とした正の角度の回転では、上向きのオブジェクトは右に向き、負の角度では左に向きます。また、transform.forwardもそれに合わせて回転します。
チャレンジ
簡単タンクにタンク操作を追加しましょう。右矢印キーで右に、左矢印キーで左に、y軸を中心に1秒あたりturn度回転します。上矢印キーを押すと、向いている方向に1秒あたりspeed単位進みます。回転するだけでは移動しません。
Playを押して、旋回して走行したら、Checkを押してください。
自分で試してみよう
using UnityEngine;
public class Tank : MonoBehaviour
{
public float speed = 3f;
public float turn = 90f;
void Update()
{
// 右/左矢印キー: y軸を中心に旋回。上矢印キー: 戦車が向いている方向に進む。
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。