我修复了敌人的移动AI逻辑,使敌人围绕玩家以更自然的方式。

总体逻辑是“简单”的:

  • 我在玩家周围漂浮着不同的类型的点(CC = 近战战斗位置,ArounV = 玩家周围垂直方向的点,D = 中距离舞蹈)
  • 每个近战敌人都想去一个CC点打玩家脸
  • 每个敌人都会评估所有可用的CC点:
  • 与敌人距离越近的分数越高
  • 如果线条经过玩家身上的点,则丢弃
  • 如果另一个敌人也要去那个点,则丢弃
  • 我只选择最高可用的CC点
  • 如果没有可用(例如所有点都被丢弃),敌人会重复评估过程来找到一个ArounV点(评估函数基本相同)。
  • 当走向一个ArounV点时,之前的CC点的“视线”就会打开(即玩家不再在中间),使敌人在某个时刻走向它。

基本上,游戏中的所有运动都是关于评估/丢弃点以及fallback点。

给定近战敌人的典型AI代码如下:

if( 有恐惧() )
  走到点(Dance );
else if( !walkToPoint(CloseCombat) )
  if( !walkToPoint( GetAroundVertically ) )
    walkToPoint( Dance );