回顾:可触及范围内最近的对象
本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 11 课,共 64 课。
本章使用了接口,这样一个脚本就能处理除了方法之外毫无共同点的对象。“交互”键现在会选择距离最近的对象。
挑战
简单按下 Space 时应使用最近的物体,而不是第一个物体。
- 在
Interactor中,在循环之前添加IInteractable nearest = null;和float best = Mathf.Infinity;。 - 在循环中,保留与玩家的
Vector3.Distance小于best的物体及其距离。 - 循环结束后,如果
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;
}
}
}
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
Unity 游戏架构中的所有课
自己练习: Unity 在线编辑器