有人最近问我在Unreal Source Discord中关于如何优化游戏AI,特别是在战斗中应如何处理大量NPC时应采取哪些行动。我回想了一下这些内容并想把它分享出来。

大多数情况下,在规模大的战斗中,您的游戏AI成本将来自以下几点:

1.视线检测
2.EQS询问(或决定NPC的行为)
3.导航询问
4.移动和绘制
5.动画
6.角色渲染

1.视线检测

仅每次更新做一次到敌人。对其他目标进行视线检测的频率更低。
不在战斗中进行对友方的视线检测,除非你需要的时候。
*不检测场景中的其他物体视线(比如尸体)除非你需要。

2.EQS询问

EQS询问可以非常昂贵,但这也非常依赖于游戏。
尽量不频繁地执行,尽量避免在同一帧上进行多个EQS询问。
在一个有限区域之内进行询问。
如果可以的话,避免对每个位置进行导航检查和视线检测。

3.导航询问

设定行为使得NPC仅在战斗中移动一个小距离。
这实际上并不是一个昂贵的事情,因为NPC在战斗中通常是不移动太多的。
*你需要确保所有NPC在同一时间进行导航询问,这样可能会导致抖动。

4.移动

Unreal的默认角色移动组件如果有大量NPC的话可以非常昂贵。其中一个最大的罪魁祸首是找到NPC以下的地面高度的计算。
虽然可以优化这个但是很难,因为要么需要修改引擎代码,要么重写大量的东西。
*如果可以避免使用角色避障算法(如RVO或Orca),你可以使用NPC之间的行为反应。在NPC之间挤压时。如果NPC之间彼此移动太靠近或者根本不需要NPC移动时(玩家会意识不到NPC在移动)。

5..动画

查看Unreal的重要性管理器。你可以使用它来减少每帧NPC骼的更新数量。
看看Unreal的动画分享插件。
*顶点动画并不是那么有用,因为它不能对NPC周围的世界做出反应,也不能处理非平扁的环境。

6.角色渲染

Unreal的重要性管理器也在这里是有用的。
在战斗时可能不需要渲染所有NPC。
*在一段时间后去掉或停止渲染死掉的NPC。

总的来说有很多东西会很昂贵。重要的是要进行逐帧性能分析以确定应该花费多少努力。

是否错过了任何其他内容?