NavMesh有几个API很有用
NavMesh.SamplePosition
根据给的点进行采样,可传入最大距离,返回true说明采样到了点,否则采样失败(可以用来获得地形高度,但是最大距离不要太大,注意效率)
NavMesh.Raycast
向目标点发射一条射线,返回true说明碰到了边缘,Hit就是边缘那个点
NavMesh.CalculatePath
计算路径,返回false就走不过去,返回true说明可以走过去,Corners是路径点
//using UnityEngine.AI;
var navAgent = gameObject.AddComponent<NavMeshAgent>();
navAgent.enabled = true;
navAgent.speed = 4.5f;
navAgent.radius = 0.0f;
navAgent.height = 2f;
navAgent.acceleration = 10000.0f;
navAgent.angularSpeed = 30000.0f;
navAgent.autoRepath = false;
navAgent.autoBraking = true;
// 判断是否可以通过导航找到路径
var targetPos = new Vector(200, 0, 225);
var ok = navAgent.CalculatePath(targetPos, navAgent.path);
// 注意,CalculatePath返回true不代表路一定能走通,可能会因为有阻挡物,中间走不过哦
// 设置目标点
if(ok)
{
navAgent.Stop();
navAgent.Resume();
navAgent.SetDestination(targetPos);
}