网络下的 ASC:所有权与权威
这一页集中讲多人项目里 ASC 的"谁说了算"。
三种权限角色
GAS 的网络模型里,一个对象有三种"视角":
| 角色 | 位置 | 权力 |
|---|---|---|
| Server(权威) | 真实状态 | 所有 GE 应用、伤害结算、属性判定 |
| Owner 客户端 | 玩家自己的机器 | 可发起 GA(预测)、可看到详细状态 |
| Simulated(模拟) | 其他玩家的机器 | 只接收同步结果 |
GA 的三种网络执行策略
UPROPERTY(EditDefaultsOnly, Category="Ability")
EGameplayAbilityNetExecutionPolicy NetExecutionPolicy; // 在 GA 类配置
| 策略 | 谁执行 | 适合 |
|---|---|---|
| Server Only | 只服务器 | 不需要客户端响应的逻辑 |
| Server Initiated | 服务器发起、回调客户端 | 多数技能的最佳选择 |
| Local / Predictive | 本地预测 + 服务器确认 | 响应敏感的操作(移动类) |
新手建议:默认 Server Initiated,确定有延迟敏感需求再上 Predictive。
权限带来的三个"静默失败"
| 症状 | 根因 |
|---|---|
| 客户端按技能无反应 | GA 设了 Server Only 但客户端无法触发;或 GA 没有权限 |
| 客户端能放但服务器没扣蓝 | Cost GE 在客户端本地应用,Server 未执行(Net Execution Policy 配错) |
| 只有自己的客户端看到伤害 | GE 的同步策略(Replication Mode)没对 |
排查三连:Net Execution Policy 是什么?GE 应用在哪一端?Replication Mode 是什么?
预测与回滚(概念先建立)
当客户端用 Local/Predictive 策略放技能: 1. 客户端预测地应用 GE(本地先看到扣血/扣蓝); 2. 服务器确认后,客户端回滚预测的临时修改,再应用权威结果。
这就是 UI 上偶尔看到"血量数字跳一下"的原因。GAS 用 PredictionKey 机制管理这个过程,初级阶段不要深究——需要时再开 Predictive,错误最少。
监听服务器(Listen Server)的陷阱
开发期常用"监听服务器"(一个客户端兼任服务器),但它和 Dedicated Server 的行为不完全一致: - Listen Server 的 Host 拥有 Server 权限,某些预测路径走不到; - 必须在 Dedicated Server 上做最终验证,否则上线会发现只在专用服务器上出现的 bug。
本章小结
- 三视角(Server/Owner/Simulated)与三种 Net Execution Policy 是 GAS 网络问题的主轴。
- 新手默认 Server Initiated;延迟敏感的操作才上 Predictive。
- Listen Server 与 Dedicated Server 行为有差异,上线前必须在专用服务器验证。
