1

我正在使用当前最新版本的 Unity 2017.1f1。

我想要做什么

在我的 2.5D 游戏中,我生成的敌人将向玩家导航,同时避开运行时生成的障碍物(启用弯曲)。我还额外生成了一个平面(玩家和敌人在其上移动),我希望当前平面 navMesh 表面通过 navMesh 链接连接到下一个生成的平面 navMesh 表面,以便敌人可以通过链接导航到其他平面。

问题是什么?

有两个问题发生:

  1. 靠近弯曲的障碍物的链接enabled不会连接到下一个平面。
  2. 由于玩家可以左右奔跑,我根据玩家面对的方向旋转平面,但是将平面旋转 180 度,而它的方向等于Vector3.Down(即 (0,-1,0))navMesh 链接在该平面上不会在运行时连接到其相邻平面。

我的实现

首先,我在运行时使用Unity在GitHub上提供的navMesh组件来实现这一点。现在,当我以附加方式生成平面时,我首先构建 navMesh 表面,然后更新其附加链接。

    nextPlaneSurface.BuildNavMesh();
    for (int i = 0; i < nextPlaneLinks.Length; i++) {
        nextPlaneLinks[i].UpdateLink();
    }

接下来,我更新当前平面(玩家所在的平面)navMesh 链接以连接新生成的平面 navMesh 表面。

    for (int i = 0; i < currPlaneLinks.Length; i++) {
        currPlaneLinks[i].UpdateLink();
    }

我试图解决的问题

对于第一个问题:-

  • 在生成障碍之前和之后更新当前链接并重建导航网格。
  • 在生成障碍之前和之后仅更新当前链接。

对于第二个问题:-

  • 我没有线索,我不知道是什么原因造成的:(

如果有人可以帮助我,我将不胜感激,如果你们可以在统一脚本中解释内部发生的事情,这将非常有帮助。毕竟,我遇到这些问题是因为我没有正确理解这个概念。

4

1 回答 1

0

我终于找到了我的问题的解决方案,我无法链接两个平面的原因是 Navmesh 表面瓦片尺寸太大。减小瓷砖尺寸后,链接与飞机上的障碍物相连。

对于初学者,您可以在高级部分中找到 NavMeshSurface 组件(由 Unity 在GitHub 上提供)下的 tile size 字段。

于 2018-04-10T13:26:52.337 回答