Menu
CoddyTech

対象を見る

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 34/85。

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)を狙います。

challenge icon

チャレンジ

中級

ローバーが進む方向を向くようにしましょう。

  1. Update()内のコメントの下にif (move != Vector3.zero)と書き、ローバーが停止しているときは向きを保つようにします。
  2. その中で、transform.LookAt(transform.position + move);を呼び出します。

「プレイ」を押して運転すると、ローバーの前面が進む方向を向きます。その後、「確認」を押します。

自分で試してみよう

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;
        // ローバーを進行方向に向ける
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド