此脚本允许通过在对象表面上单击鼠标来选择导航网格上的目标点。单击位置由_射线投射_确定,而非像将激光束指向对象来查看其所在位置(有关此技术的完整描述,请参阅摄像机射线页面)。由于 GetComponent 函数的执行速度相当慢,因此该脚本在 Start 函数期间将其结果存储在变量中,而不是在 Update 中重复调用它。
// MoveToClickPoint.cs
using UnityEngine;
using UnityEngine.AI;
public class MoveToClickPoint : MonoBehaviour {
NavMeshAgent agent;
void Start() {
agent = GetComponent<NavMeshAgent>();
}
void Update() {
if (Input.GetMouseButtonDown(0)) {
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
agent.destination = hit.point;
}
}
}
}