多人游戏的 AI

多人游戏里 AI 有两个新问题:同步(所有客户端看到的 AI 行为一致)与权威(谁说了算)。

核心原则:服务器权威

组件 位置 说明
AIController Pawn 服务器生成并复制 客户端拿到的是复制体
决策逻辑(行为树 / StateTree) 只在服务器跑 客户端不需要"思考"
移动复制 角色移动组件的复制机制 服务器算路径,客户端同步位置
表现逻辑 客户端本地 动画、特效各自播放

为什么决策不复制

决策的结果(位置、状态、播放的动画)通过已有的复制机制(移动同步、Montage 复制、状态变量复制)传达。决策过程本身不复制,只复制它的输出。这是带宽与一致性的平衡。

常见架构

服务器:
  AIController + 行为树(决策)
     ↓ 复制
  Pawn 的位置 / 旋转 / 状态变量

客户端:
  Pawn(复制体)
     ↓ 读状态变量
  本地表现:动画、特效、音效

多人 AI 的常见坑

坑 表现 解法
客户端 AI 不动 决策跑在客户端(或复制配置错) 检查 AIController 的复制与运行权限
所有客户端 AI 表现不一致 表现逻辑依赖服务器状态但客户端没有 状态变量复制 + 客户端本地表现
延迟下 AI 表现滞后 玩家与 AI 交互判定同步问题 交互判定用服务器的,表现用预测
大量 AI 的带宽 每个都复制全部状态 相关性距离 / 只复制必要状态

一个特殊场景:专用服务器的 AI 数量

专用服务器跑 100 个 AI 的决策,CPU 压力是客户端的两倍——因为所有 AI 都在服务器"思考"。此时降频策略更重要:

  • 远离所有玩家的 AI 进入"待机模式"(降低服务频率甚至冻结);
  • 分档决策预算(每帧只给一定数量的 AI 做高频决策)。