我正在使用当前最新版本的 Unity 2017.1f1。
我想要做什么
在我的 2.5D 游戏中,我生成的敌人将向玩家导航,同时避开运行时生成的障碍物(启用弯曲)。我还额外生成了一个平面(玩家和敌人在其上移动),我希望当前平面 navMesh 表面通过 navMesh 链接连接到下一个生成的平面 navMesh 表面,以便敌人可以通过链接导航到其他平面。
问题是什么?
有两个问题发生:
- 靠近弯曲的障碍物的链接
enabled
不会连接到下一个平面。 - 由于玩家可以左右奔跑,我根据玩家面对的方向旋转平面,但是将平面旋转 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();
}
我试图解决的问题
对于第一个问题:-
- 在生成障碍之前和之后更新当前链接并重建导航网格。
- 在生成障碍之前和之后仅更新当前链接。
对于第二个问题:-
- 我没有线索,我不知道是什么原因造成的:(
如果有人可以帮助我,我将不胜感激,如果你们可以在统一脚本中解释内部发生的事情,这将非常有帮助。毕竟,我遇到这些问题是因为我没有正确理解这个概念。