RVO避障的探究

RVO避障的探究

如果战斗中有数百个单位,不管是避障还是寻路,这个数量已经不适合在服务器端进行所有运算了,假设需要同时进行100场战斗,一场战斗400个单位,总4w个单位。假设后端逻辑20帧/秒,要在这1/20秒内tick4w个单位的逻辑,我觉得是不可能的。所以改成后端只做1个单位的逻辑,前端将这一个单位行为丰富化变为一个部队。之前在游戏寻路和避障探索文中提到了这一算法。这个算法可以根据在教学网站和一些比较好的博客学习RVO算法。
这里讲一下我遇到的问题

1. 我方单位和对方单位需不需要避障

原来写demo的时候,我是将所有单位单位避障的。这样的话就会有问题,假设两个单位是正对面即将碰撞的,就是一般战斗中敌方和我方单位相撞而打起来的情况,在这情况下如果这两个单位相互避障将都无法运动,因为他们的行为目的就是靠近甚至相撞,而如果避障的话得目的相反。这就矛盾了,最后用RVO算法算出的双方速度都将是0。所以我方单位和对方单位不能避障,那怎么避免他们重合?只要设定攻击范围是略大于物体半径的,当敌对两方单位靠近到一定距离就会停止移动,并开始攻击,这一点是可以通过自己的游戏逻辑实现的。但是这样并不能保证完全不重合,因为每次移动的距离有可能比较大。

2. RVO的每次移动精度

在官网给出的两个例子中,其中有一个例子是

RVO避障的探究_第1张图片
image.png
图中250小圆点,通过RVO可以使这250个单位都无碰撞的运动到到对面的坐标。但这只是理想情况,因为一些周围避障的一些干扰,实际上当单位多时,一个单位很难完全运动到自己的目的地,所以根据自己的情况允许当物体达到目的地的半径xx范围内就算抵达目标,否则一些情况运动将无法停止。

你可能感兴趣的:(RVO避障的探究)