多人游戏的 AI
多人游戏里 AI 有两个新问题:同步(所有客户端看到的 AI 行为一致)与权威(谁说了算)。
核心原则:服务器权威
| 组件 | 位置 | 说明 |
|---|---|---|
| AIController Pawn | 服务器生成并复制 | 客户端拿到的是复制体 |
| 决策逻辑(行为树 / StateTree) | 只在服务器跑 | 客户端不需要"思考" |
| 移动复制 | 角色移动组件的复制机制 | 服务器算路径,客户端同步位置 |
| 表现逻辑 | 客户端本地 | 动画、特效各自播放 |
为什么决策不复制
决策的结果(位置、状态、播放的动画)通过已有的复制机制(移动同步、Montage 复制、状态变量复制)传达。决策过程本身不复制,只复制它的输出。这是带宽与一致性的平衡。
常见架构
服务器:
AIController + 行为树(决策)
↓ 复制
Pawn 的位置 / 旋转 / 状态变量
客户端:
Pawn(复制体)
↓ 读状态变量
本地表现:动画、特效、音效
多人 AI 的常见坑
| 坑 | 表现 | 解法 |
|---|---|---|
| 客户端 AI 不动 | 决策跑在客户端(或复制配置错) | 检查 AIController 的复制与运行权限 |
| 所有客户端 AI 表现不一致 | 表现逻辑依赖服务器状态但客户端没有 | 状态变量复制 + 客户端本地表现 |
| 延迟下 AI 表现滞后 | 玩家与 AI 交互判定同步问题 | 交互判定用服务器的,表现用预测 |
| 大量 AI 的带宽 | 每个都复制全部状态 | 相关性距离 / 只复制必要状态 |
一个特殊场景:专用服务器的 AI 数量
专用服务器跑 100 个 AI 的决策,CPU 压力是客户端的两倍——因为所有 AI 都在服务器"思考"。此时降频策略更重要:
- 远离所有玩家的 AI 进入"待机模式"(降低服务频率甚至冻结);
- 分档决策预算(每帧只给一定数量的 AI 做高频决策)。
