用途:为UE5中每个运行时游戏状态决定其归属类,核心依据是状态必须存活多久。类具有不同生命周期,状态放在过短的类中会丢失,放在过长的类中会跨局残留,二者都在声明变量时决定。\n\n主要能力:按生命周期分配所有者,先问状态需存活多久(不到一次附身、一次附身、整场比赛、跨关卡切换、跨会话),由此选出所有者;判断谁需要读取该状态,若许多无关系统经深层对象图读取,说明所有者层级过低;区分“比赛规则”与“比赛状态”;优先使用子系统而非单例或静态;把分配记录到项目上下文文件中,并附上 justifying 的生命周期。可按需加载引用的参考文档:references/lifetime-table.md、references/misplacement-costs.md、references/subsystems.md。\n\n使用方式:技能触发时按固定格式返回:状态表(状态|所需生命周期|所有者类|读取者)、理由(排除更短生命周期所有者的事件)、重置行为(重生、回合结束、关卡切换时的明确行为)、访问路径(每个读取者如何到达状态及超过两跳的路径)、子系统选择(作用域及理由)、未验证项(生命周期确实未知者标注而非猜测)。\n\n硬性规则:不得把必须存活于销毁、重生或附身切换的状态放在Pawn上;不得把需跨关卡切换的持久玩家状态放在Controller上,应检查项目实际保留内容;比赛规则与比赛状态分离,需被其他系统观察的放共享状态对象;游戏状态不使用静态或临时单例;每项状态在其存活的每个边界都有定义的重置行为;选择满足生命周期的最窄作用域。\n\n验证:销毁测试(会话中销毁并重生Pawn,应持久者持久、应重置者重置);第二回合测试(不重启进程连玩两回合,泄漏状态在此显现);切换测试(跨关卡切换并审计表格,所有者是否存活取决于项目配置,应验证而非推理);可达性审计(统计典型读取者到状态的跳数,长链说明所有者过低)。\n\n限制:本技能只决定状态存放位置,不涵盖序列化与存档(除生命周期外还有持久化问题),也不涵盖状态本身的内容或设计;不涵盖网络复制与权限,这些是在此之上的问题,本技能不足以支撑联网项目,且复制可能被阶段禁令禁止(ue5-phase-bans)。
ue5-gameplay-state-ownership
通用与其它
更新于 10-16 00:00