最佳实践
这些取舍来自 GCS 的组件边界和预测契约。先让一条近战或远程走到 Attack Result,再叠加连击、武器和多人表现。
先跑通最小链路
一个角色、一份 FGCS_AttackDefinition、一种命中方式(Trace 或子弹)就够验证 Flow。同时接连击表、多把武器、锁定和预测,会把“没编译”“通道不对”“ASC 未初始化”混在一起。最小闭环见 快速开始 和 挂上战斗组件。
定义描述规则,请求打开窗口
FGCS_AttackDefinition / FGCS_TraceDefinition / FGCS_BulletDefinition 是可复用的行数据。UGCS_AttackRequest_Melee / UGCS_AttackRequest_Bullet 只描述这一窗用哪一行、开哪些 Trace、朝哪发射。GCS_ANS_AttackTrace 和 GCS_ANS_BulletTrace 只存请求,Task 才执行。把整段规则写进 Notify 或 AnimBP,换招就要复制动画。
权威结果先于表现
服务器的 Attack Result 或已确认 Bullet Entry 是结算真源。客户端预测弹可以有轨迹和 Cue,但不应用 GE。先修权威路径,再调 LocalPredicted Processor、镜头和受击动画。Debugger 里 Shared 的预测摘要能区分 Pending、Matched 和 Conflict。
连击入口与攻击 Ability 分开
UGCS_ComboAbility 按实体 GetComboDefinitionTable 选行并改 ComboStep。子 Ability 负责 Trace 或子弹。不要让每个攻击 Ability 自己加减步骤,也不要把连击计数写进 AnimBP。步骤复制和选招失败都会失去统一入口。
武器激活不是装备栏
SetWeaponActive 控制这把 AGCS_WeaponActor 是否创建 Trace、是否处于可用态。SetCurrentWeapon 只标记本次动作用哪把,注释写明它不是武器切换。装备栏、插槽和生成世界 Actor 属于项目或库存层。可以同时激活多把武器,当前动作武器仍然只有一个。
不要把 GIPS 当成 GCS 模块
输入缓冲、Input Setup 和按键到 Ability 的映射属于产品附带的 Generic Input System。GCS 的 .uplugin 硬依赖 GGA 和引擎插件,不依赖 GIPS。缺按键时查 GIPS 或项目输入,不要在战斗组件里找 Enhanced Input 资产。UGCS_AbilityActionSetSettings 是 DataAsset,用来按标签选动作,也不是输入模块。
预测策略放对 Processor
EGCS_AttackResultProcessorPolicy:
策略 | 放什么 |
|---|---|
| 仅本地即时反馈:顿帧、轻 Cue、预测受击姿势 |
| 各端都要看到、且不是预测上下文的结果 |
| 死亡、掉落、扣资源等权威状态 |
把扣血或死亡放进 LocalPredicted,匹配复制结果时仍可能再跑一次,或在客户端改掉不该改的状态。编辑器可用 bEditorDebugEnabled 单条关闭 Processor 做对照。Death Processor 原生为空,项目必须自己实现死亡。