物を見る
CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 26/67。
transform.LookAt(point) は、オブジェクトの前方軸である青い Z 軸の矢印がワールド内の位置を指すように、オブジェクトの向きを変えます。オブジェクトの向きは変えますが、移動はさせません。このサーチライトは (0, 6, 0) にある塔の上に設置され、(4, 0, 10) にある門を照らしています。
void Start()
{
transform.LookAt(new Vector3(4, 0, 10));
}門はライトより低い位置にあるため、サーチライトは向きを変えるだけでなく下にも傾きます。LookAt は上下も含め、指定した点をまっすぐ指すように向きを合わせます。その後、transform.forward はライトから門の方向を指します。
Start() で呼び出すと、LookAt は一度だけ向きを合わせます。Update() で呼び出すと、毎フレーム向きを合わせ直すため、オブジェクトや点が移動しても、オブジェクトはその点を向き続けます。引数には常に位置を指定します。LookAt(Vector3.forward) は、オブジェクトがどこにあっても、ワールドの中心の近くにあるワールド座標 (0, 0, 1) の点を指します。
チャレンジ
中級ローバーはすでに、ワールドの x 軸と z 軸に沿って矢印キーで走行します。走行する方向を向くようにしましょう。移動中は、斜め方向も含め、前面(前方軸)が進行方向を指します。キーを押していないときは停止し、最後に走行した方向を向いたままになります。
Playを押して走行し、その後Checkを押します。
自分で試してみよう
using UnityEngine;
public class Rover : MonoBehaviour
{
public float speed = 3f;
void Update()
{
Vector3 move = Vector3.zero;
if (Input.GetKey(KeyCode.RightArrow)) move += Vector3.right;
if (Input.GetKey(KeyCode.LeftArrow)) move += Vector3.left;
if (Input.GetKey(KeyCode.UpArrow)) move += Vector3.forward;
if (Input.GetKey(KeyCode.DownArrow)) move += Vector3.back;
move = move.normalized;
transform.position += move * speed * Time.deltaTime;
// ローバーを進行方向に向ける
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。