Tekkaman

导航

 

Steering Behaviors

1、Seek

  下述的算法是一个基本Seek行为,但不带任何Steering输出的力。在该公式作用下,游戏个体的移动方式是直线型的,如果target的位置变了的话,个体会立即响应,并且会以新的方向,以直线的形式向目标位置靠近,这会给人一种从当前路径突兀的变换到新路径的感觉。

    

  Seek行为被分解为两个力:目标速度,和转向速度。目标速度始终朝向目标位置,转向力是目标速度减去个体的当前速度得出的,它的物理意义就是向着目标位置给个体一个推力。

    

    

  计算了转向力之后,它必须和原先版本的速度方向合成,再施加给个体。

    

    

  注意,seek中要限制steering的最大值,否则每一次 velocity+steering 均会等于 desired velocity。

 

2、Flee。

  Flee的desired velocity调整为seek的相反位置:

    

    

 

  使用Flee算法,可以避免角色大幅转向(如180度)问题,如下,橘色为转向曲线:

    

  注意:Flee中也要对 steering 限速。

 

3、Arrival

  Seek行为使个体向目标位置移动,当个体移动到目标点后,算法仍旧作用在个体之上,对它施加转向力,这会导致个体在目标点周围来回移动。

  Arrival行为会规避个体移动超过目标点的现象,当个体靠近目标点时,它会使个体减速,最终停在目标点上。

  行为被分成两个阶段:

    1)第一阶段是个体还远离目标点时,它的工作方式和之前介绍的Seek行为一样

    2)第二阶段是个体靠近目标点时,在减速范围内。

    

    

    

   注意:Arrival 中不需要对 steering 限速,因为如果desired_velocity降为0,那么转向力会是velocity,那么它和速度方向的合力为 0,个体就不会运动了。

4、Wander

  游戏AI的前方加一个圈,圈的半径以及角色到圈的距离越大,施加在角色身上的推力就越强。

  1)CircleCenter 向量。

    

      

  2)displacement,计算移位力

    

    

  综合起来就是以下这样:

    

    

    

5、Persulit

     

    

    

     当T是一个常数时,会有一个问题:在离目标点很近的距离下,追踪的准确度会变得很差。

    这是因为当追踪者靠近目标后,追踪者还是以常数T时间后的位置进行预测。这和真实的追踪行为相违背,真实的追铺在靠近物体后会停止预测,并且以物体当前实际位置作为目标点。

    有一个简单的方式来改进我们上面的追捕逻辑,就是用动态的T来替换之前恒定的T。

    

     

 6、整合

    

    

参考:https://cloud.tencent.com/developer/article/1005839

posted on 2018-06-21 18:55  Tekkaman  阅读(869)  评论(0编辑  收藏  举报