我试图了解当导航网格障碍挡路时如何使用Unity的导航系统最接近目的地。 我有一个胶囊障碍物(使用Carve)和使用脚本管理的胶囊代理的示例。它似乎工作得很好,但是当我"点击"在设置代理人目的地的障碍物(到雕刻区域内的一个点)上,代理人移动到障碍物周围的另一个位置。
如何让代理人到达障碍物周围的最近点或到达所选目的地的最近点(在障碍物区域内)?
移动代理的脚本
using UnityEngine;
using UnityEngine.AI;
public class CapsuleMovement : MonoBehaviour {
NavMeshAgent agent;
public NavMeshPathStatus partial;
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;
}
}
}
}
答案 0 :(得分:1)
取点击对象位置的中心并将其稍微移向移动的单位/播放器,然后将该位置用作坐标,而不是直接点击鼠标。
如果这不起作用。
这不是一个保证的答案,因为在这种情况下这很难给出,但我希望这会带给你更多。
我怀疑它可能是你点击的坐标,哪些东西不能正常运作。尝试生成&#34; ClickObject&#34;在鼠标点击的位置,它可以只是一个彩色球体。这样您就可以确认点击实际发生的位置。
此外,还有两种方法可以在使用NavMeshes和定位时派上用场。
您可以尝试使用SamplePosition。
https://docs.unity3d.com/540/Documentation/ScriptReference/NavMesh.SamplePosition.html
在指定范围内找到NavMesh上的最近点。
也许还有FindClosestEdge
https://docs.unity3d.com/530/Documentation/ScriptReference/NavMesh.FindClosestEdge.html
从NavMesh上的某个点找到最近的NavMesh边缘。