可以使用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上。如果在,则输出相应的信息。

请使用Unity自带的方法设计代码获取NavMeshPath的corner节点是否在OffMeshLink上的信息

原文地址: http://www.cveoy.top/t/topic/bD8Z 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录