Menu
CoddyTech

Inspector 中的引用

本课属于 Coddy Unity 学习旅程的“Unity 脚本基础”单元。第 43 课,共 85 课。

一个字段可以保存另一个对象。为它指定 Transform 或 GameObject 这样的类型,Inspector 中就会显示一个空槽。你可以将 Hierarchy 中的对象拖到空槽里。这个摄像机脚本会跟随拖到 player 中的对象,始终位于它上方 3 个单位、后方 6 个单位:

public Transform player;

void Update()
{
    transform.position = player.position + new Vector3(0, 3, -6);
}

空槽会显示 None,每一帧执行第一行使用该字段的代码时都会抛出异常:UnassignedReferenceException: The variable player of CameraFollow has not been assigned. 错误消息的下一行会告诉你该怎么做:You probably need to assign the player variable of the CameraFollow script in the inspector. 消息中列出了字段和脚本的名称,因此你知道该填写哪个槽。

有些脚本在槽为空时也应该能正常工作。Unity 会将空槽视为等于 null,因此这类脚本会先检查,再使用它。如果在 Update() 中用 if (player != null) 包住这一行,那么没有玩家时,摄像机就会停在原处,而不是抛出异常。

challenge icon

挑战

中等

让每个守卫前往其 Inspector 中指定的岗哨。

  1. 添加字段 public Transform post;。Guard1 的槽位中放置 Post1;Guard2 的槽位留空。
  2. 在 Update() 中,如果 post == null,就执行 return;,这样没有岗哨的守卫就会待在原地。
  3. 然后使用 Vector3.MoveTowards(transform.position, post.position, speed * Time.deltaTime) 移动。

按“开始”:Guard1 会走向自己的岗哨,Guard2 则会等待。然后点击“检查”。

亲手试试

using UnityEngine;

public class Guard : MonoBehaviour
{
    // post:这个守卫要走向的 Transform,在 Inspector 中设置
    public float speed = 2f;

    void Update()
    {
        // 以 speed 指定的速度走向 post。如果 post 为空,守卫就留在原地。
    }
}

Unity 脚本基础中的所有课

自己练习: Unity 在线编辑器