请使用Unity自带的方法设计代码获取NavMeshPath的corner节点是否在OffMeshLink上的信息
可以使用NavMeshPath类中的corners属性获取路径的所有角点,然后遍历每个角点,调用NavMesh.CalculatePath方法获取当前角点和下一个角点之间的路径,判断该路径是否包含OffMeshLink,如果包含则说明当前角点和下一个角点之间的路径经过了OffMeshLink。
以下是示例代码:
NavMeshPath path = new NavMeshPath();
NavMesh.CalculatePath(startPosition, endPosition, NavMesh.AllAreas, path);
Vector3[] corners = path.corners;
for (int i = 0; i < corners.Length - 1; i++)
{
NavMeshPath linkPath = new NavMeshPath();
NavMesh.CalculatePath(corners[i], corners[i + 1], NavMesh.AllAreas, linkPath);
if (linkPath.status == NavMeshPathStatus.PathComplete && linkPath.corners.Length > 1)
{
NavMeshLink link = NavMesh.FindClosestEdge(corners[i], NavMesh.AllAreas).attachedNavMeshLink;
if (link != null && link.linkType == NavMeshLinkType.OffMeshLink)
{
Debug.Log("Corner node " + i + " is on OffMeshLink");
}
}
}
该代码首先使用NavMesh.CalculatePath方法获取路径的所有角点,然后遍历每个角点,使用NavMesh.CalculatePath方法获取当前角点和下一个角点之间的路径,判断该路径是否包含OffMeshLink。如果包含,则使用NavMesh.FindClosestEdge方法获取OffMeshLink的信息,判断当前角点是否在OffMeshLink上。如果在,则输出相应的信息。
原文地址: http://www.cveoy.top/t/topic/bD8Z 著作权归作者所有。请勿转载和采集!