用途
该技能用于指导 Unreal Engine 5.6 至 5.8 中游戏系统的存档/读档(Save/Load)与多人网络复制(Replication)工作流。当需求涉及 SaveGame 模式设计、序列化、状态恢复、网络同步或重连一致性时,可参考本技能。
主要能力
- 区分必须持久化的状态与必须复制的状态,将本地存档状态与网络运行时状态分离。
- 输出数据模式、保存流程、加载流程与网络流程。
- 提供存档管线与复制管线的 API 锚点。
- 定义状态契约:每个状态字段需归类为仅持久化、仅复制或持久化加复制。
- 提供失败处理与排查思路。
API 锚点(UE5.6-UE5.8)
存档管线锚点:
- USaveGame
- UGameplayStatics::CreateSaveGameObject(...)
- UGameplayStatics::SaveGameToSlot(...), LoadGameFromSlot(...)
- UGameplayStatics::AsyncSaveGameToSlot(...), AsyncLoadGameFromSlot(...)
复制锚点:
- GetLifetimeReplicatedProps(...)
- DOREPLIFETIME(...)
- ReplicatedUsing=OnRep_*
- UFUNCTION(Server/Client/NetMulticast, ...)
权威锚点:
- 服务器权威的变更路径
- 客户端请求经由校验后的服务器 RPC 入口路由
状态契约
每个状态字段必须归类为以下之一:
- 仅持久化(SaveGame,不复制)
- 仅复制(运行时同步,不持久化)
- 持久化加复制(带存档恢复的权威状态)
每个持久化模式必须包含:
- 显式版本整数
- 稳定标识符/键(避免基于索引的隐式排序)
- 旧版本的迁移行为
每个复制字段必须定义:
- 复制条件或范围
- 客户端上的 OnRep_* 行为
- 服务器写入所有权
使用方式
工作流分为六步:
- 划分状态:按所有权识别游戏状态(本地玩家、世界/共享、对局/会话),拆分临时运行时值与持久化值,标记每个字段的权威写入路径。
- 存档模式:定义带显式模式版本的存档结构体/对象,为 Actor、组件和类物品条目使用稳定键/ID,包含可选的向后兼容迁移元数据。
- 保存管线:以确定性顺序将运行时状态收集到存档模式,根据延迟敏感度选择同步或异步槽位 API,返回结构化保存结果(成功、失败原因、所用版本)。
- 加载与恢复管线:加载存档对象、校验版本、必要时执行迁移,按依赖安全顺序应用恢复(所有者先于依赖者),对缺失资源/实体使用显式回退策略。
- 复制管线:仅复制客户端可见的运行时状态,用 DOREPLIFETIME(...) 注册复制属性,用 OnRep_* 进行客户端重建/UI 刷新而非权威写入。
- RPC 权威管线:使用客户端到服务器的 RPC 请求动作,在服务器上校验载荷后再变更复制状态,仅在需要时通过复制/NetMulticast 广播结果状态。
适用场景
- 设计 SaveGame 模式与序列化方案。
- 实现存档保存、加载与状态恢复。
- 规划多人游戏中的状态复制与权威写入。
- 处理重连后复制值与存档值不一致的问题。
- 排查加载成功但游戏状态不一致、旧存档更新后损坏、OnRep_* 频繁触发导致帧率尖峰、客户端触发未授权状态变更、异步保存/加载回调与游戏转换竞争、部分恢复留下孤立 Actor/组件等问题。
限制与约束
- 服务器是复制游戏状态的唯一真相来源。
- 应用状态变更前必须校验所有客户端请求的动作。
- SaveGame 模式需可版本化,避免脆弱的隐式排序。
- 不要在多人代码路径中假设单人行为。
- 恢复过程尽可能保持幂等(部分失败后可安全重试)。
- 避免持久化仅网络用的临时缓存。
- 不要将客户端本地存档数据作为多人游戏的权威输入。
- UE5.6-UE5.8 中上述 SaveGame 与复制 API 保持稳定;优先使用稳定的引擎运行时 API 而非项目特定的序列化捷径。
- Iris 在 UE5.8 中已可用于生产,但不要假设现有 5.6/5.7 项目已迁移到 Iris;在给出系统特定指导前,先检测项目当前使用的复制系统。
- 当变更破坏现有存档兼容策略,或复制设计影响反作弊/权威架构决策时,需要升级处理。