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 在线编辑器