Menu
CoddyTech

回顾:可触及范围内最近的对象

本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 11 课,共 64 课。

本章使用了接口,这样一个脚本就能处理除了方法之外毫无共同点的对象。“交互”键现在会选择距离最近的对象。

challenge icon

挑战

简单

按下 Space 时应使用最近的物体,而不是第一个物体。

  1. 在 Interactor 中,在循环之前添加 IInteractable nearest = null; 和 float best = Mathf.Infinity;。
  2. 在循环中,保留与玩家的 Vector3.Distance 小于 best 的物体及其距离。
  3. 循环结束后,如果 nearest 不为 null,就调用 nearest.Interact()。

按下运行,站在箱子和杠杆之间,然后按 Space:杠杆会被拉动。然后点击检查。

亲手试试

using UnityEngine;
using UnityEngine.InputSystem;

// 按空格键与范围内找到的第一个对象交互。
public class Interactor : MonoBehaviour
{
    public float reach = 1.5f;

    void Update()
    {
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            foreach (Collider c in Physics.OverlapSphere(transform.position, reach))
            {
                if (c.TryGetComponent(out IInteractable thing))
                {
                    thing.Interact();
                    return;
                }
            }
        }
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

Unity 游戏架构中的所有课

自己练习: Unity 在线编辑器