我正在使用Unity3D进行网络多人在线游戏,我有一个非常大的复杂3D地形场景,如森林,树木,悬崖,丘陵,山脉,山峦等。
玩家还可以构建类似于我的世界的结构,并将它们放置在场景中的任何位置,甚至可以随时移动它们。
除了人类控制的玩家外,还有自动化的AI玩家和物体,如动物在路径上漫游。
问题是如何制作这些自动AI玩家和动物,能够在静态和动态玩家创建的结构中导航,因为他们所遵循的路径很容易被玩家创建的结构,甚至其他玩家和其他AI阻挡物体,悬崖等因此,如果它们从高高的悬崖上翻滚下来,他们必须找到它们周围或让自己回到正轨。
所以我制作了一个navMesh并使用了NavAgents,但这只是处理静态的,不移动的物体,但是我如何让AI玩家互相导航,以及玩家创造的动态结构可以编号数百?
我想到将NavMeshObstacle添加到所有内容中,但这会导致它被附加到数百个对象,因为用户创建的结构是使用块或小块等小块来构建的,以创建更大的对象。
以下是我的问题:
将NavMeshObstacle附加到数百个小物体会减慢游戏速度吗?
除了使用NavMeshObstable而不降低网络游戏速度之外,还有其他方法可以导航动态对象吗?
由于
答案 0 :(得分:1)
根据NavMeshObstacle的文档,人们可以合理地假设,如果禁用雕刻(从导航网格“雕刻”一块“障碍物”),障碍物只会在代理人的方式中影响代理人的表现。它们不会影响寻路。代理商会在它关闭时绕过它们。请注意,如果有很多动态障碍,代理需要一条完全不同的路径,这对您不起作用。您还可以将它们设置为仅在移动了一定量时才从导航网格中重新雕刻出一块。你应该测试性能,但听起来它可能适合你。
http://docs.unity3d.com/ScriptReference/NavMeshObstacle.html
答案 1 :(得分:0)
如果您不想花太多时间制作自己的"传感器和导航"系统扩展统一导航然后我认为你的方式是通过NavMeshObstacles。如果您使用像Minecraft这样的块来构建障碍,以避免在每个块上添加NavMeshObstacle,那么您可以在如何限制/接近建筑系统方面做出大量选择。
还有一个好的AI系统免费为RAIN,例如,它实现了一些可扩展和一致的方式来做你想做的事情,看看团结市场是否符合你的需要。