相信大家用unity3d自带navmeshagent寻路的时候,一定会碰到多人寻路相互挤压的问题。
这个我已经解决了,而且已经应用到我们的项目中,感觉还不错。
首先提下问题的原因:navmeshagent在寻路的时候,并不会把别人当成障碍物,而是在即将和其他agent碰撞的时候,通过减速,碰撞转弯,实现避开其他agent.
但这在游戏中是无法接受的体验。
国外有一个人用了一个办法,大幅的减少了碰撞和挤压的行为,网址:
http://www.gamedev.net/page/resources/_/technical/game-programming/pathfinding-and-local-avoidance-for-rpgrts-games-using-unity-r3703
他用了代理的方法,非常聪明,而且你看它的例子,几乎感觉到完美。但经过我的测试,实际情况还是会可能出现挤压和卡主的情况。
所以如果你的寻路物体足够多,我建议用这种方式解决,首先效率很高,表现的也足够好。而且对于大量物体寻路,少数卡顿本来也是合理的。
第二种方法我不推荐,但也许是我自己实现不对,那么就是navmesh obstruct, 这个可以挖洞,挖洞之后寻路的时候就会把别人当成障碍物。
但是有三个问题