【问题标题】:Can Unity NavMesh be used to implement an A* algorithm?Unity NavMesh 可以用来实现 A* 算法吗?
【发布时间】:2017-04-13 16:27:00
【问题描述】:

我期待在我正在开发的游戏中使用 A* 寻路。 (我实际上是在为自己制作一个游戏来了解这一点)。我想知道 Unity NavMesh 如何与自定义 A* 算法一起使用,而不是使用 NavMeshAgent。

【问题讨论】:

    标签: c# unity3d a-star navmesh


    【解决方案1】:

    没有

    或者至少,不容易(你为什么想要?)。

    Unity 的内置 NavMesh 旨在供 Unity 的内置 NavMeshAgent 利用内置路径查找器使用。我不知道它使用什么算法,但 A* 实现通常在 networks 上运行。 也就是说,由边连接的节点。它不考虑内部体积(网格“面”)。

    由于 Unity 的内置函数旨在用于此类用途,因此很难直接访问任何信息以用于您自己的寻路算法。

    如果您想编写自己的探路者,那么我建议您也编写自己的网格。

    【讨论】:

      【解决方案2】:

      您可以执行以下操作:

      var navMesh = NavMesh.CalculateTriangulation() // get baked Navigation Mesh Data;
      Vector3[] vertices = navMesh.vertices;
      int[] polygons = navMesh.indices;
      

      顶点(显然)是导航网格的顶点,由它们在统一空间中的位置指示。网格由多边形定义。多边形数组显示哪个顶点属于哪个多边形。

      polygons:
      0 0
      1 0
      2 1
      3 1
      4 0
      5 1
      

      这个数组表示索引为 0,1,4 的顶点属于 0 号多边形,而索引为 2,3,5 的顶点属于 1 号多边形。

      你的导航网格是多边形。您可以定义搜索图并运行您选择的搜索算法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        • 2014-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-14
        • 2012-03-15
        相关资源
        最近更新 更多