Unity NavMesh可以用来实现A*算法吗?

6

我希望在我正在开发的游戏中使用A*寻路算法。(其实我正在制作这个游戏是为了学习它)。我想知道如何将Unity NavMesh与自定义的A*算法一起使用,而不是使用NavMeshAgent。

2个回答

3
你可以执行以下操作:
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。

这样你就得到了以多边形为单位的导航网格。你可以定义搜索图并运行您选择的搜索算法。


3

不行

或者说,至少不容易(你为什么想要这样做呢?)。

Unity内置的NavMesh是为Unity内置的NavMeshAgent使用内置的路径查找器而设计的。我不知道它使用了什么算法,但是A*实现通常在“网络”上运行。也就是说,节点之间通过边相连。它不考虑内部体积(网格“面”)。

由于Unity的内置工具旨在作为这样的使用,因此直接访问任何信息以供您自己的路径查找算法使用非常困难。

如果您想编写自己的路径查找器,那么建议您编写自己的网格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接