网络下的 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 行为有差异,上线前必须在专用服务器验证。