我目前正在研究一个游戏项目的寻路部分。我在烘烤导航网时遇到了问题——它没有覆盖我想要使其适合步行的所有区域。
这是问题的图像:
如何使用导航网格覆盖整个区域,以便代理可以步行?
不幸的是,Unity 的基于 navmesh 的导航系统仅设计用于与 y 轴对齐的地形——也就是说,世界的 y 轴用作向上向量,并且使用它作为参考来计算地形的坡度.
仅将球形对象的顶部视为可步行的原因是,如果将 y 轴视为向上矢量,则该地形其余部分的坡度大于导航网格烘焙设置所允许的坡度。
解决此问题的唯一方法是编写自定义解决方案 - 但是,幸运的是,您不是第一个提出此类问题的人。普遍接受的方法是使用A* 算法和自定义启发式函数(基于网格的顶点)来计算到目的地的最短路径。
这是关于如何在 Unity 中实现 A* 的一个很好的教程,它将让您了解基础知识,以便您可以研究如何将算法应用于环绕自身的地形。如果您不打算编写自己的解决方案,Unity Asset Store 上还有一个现有的 A* 资产出售(也提供免费版本),这被认为是对 Unity 自己的导航系统的可靠改进,并且可以适用于像你这样的非垂直地形,经过一些调整。
希望这可以帮助!如果您有任何问题,请告诉我。