我希望在我正在开发的游戏中使用A*寻路算法。(其实我正在制作这个游戏是为了学习它)。我想知道如何将Unity NavMesh与自定义的A*算法一起使用,而不是使用NavMeshAgent。
我希望在我正在开发的游戏中使用A*寻路算法。(其实我正在制作这个游戏是为了学习它)。我想知道如何将Unity NavMesh与自定义的A*算法一起使用,而不是使用NavMeshAgent。
var navMesh = NavMesh.CalculateTriangulation() // get baked Navigation Mesh Data;
Vector3[] vertices = navMesh.vertices;
int[] polygons = navMesh.indices;
顶点(vertices)显然是在Unity空间中位置指示的导航网格的顶点。网格由多边形定义,多边形数组显示哪个顶点属于哪个多边形。
polygons:
0 0
1 0
2 1
3 1
4 0
5 1
这个数组表示编号为0、1、4的顶点属于多边形0,编号为2、3、5的顶点属于多边形1。
这样你就得到了以多边形为单位的导航网格。你可以定义搜索图并运行您选择的搜索算法。
或者说,至少不容易(你为什么想要这样做呢?)。
Unity内置的NavMesh是为Unity内置的NavMeshAgent使用内置的路径查找器而设计的。我不知道它使用了什么算法,但是A*实现通常在“网络”上运行。也就是说,节点之间通过边相连。它不考虑内部体积(网格“面”)。
由于Unity的内置工具旨在作为这样的使用,因此直接访问任何信息以供您自己的路径查找算法使用非常困难。
如果您想编写自己的路径查找器,那么建议您编写自己的网格。