关于 ue5-save-load-replication
ue5-save-load-replication 是用于设计 Unreal Engine 5.6–5.8 存档与网络状态流程的技能。它区分持久化数据和运行时复制,并涵盖版本化架构、恢复、权限控制与客户端请求验证。
主要功能
- 01区分持久化状态与复制状态
- 02设计含稳定键的版本化存档架构
- 03规划同步或异步存档流程
- 04按依赖安全顺序恢复数据
- 05定义复制范围与客户端更新
- 06在服务器验证客户端请求
适用场景
- 01设计存档兼容与迁移方案
- 02在多人游戏中恢复存档状态
- 03排查存档与复制不一致
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ unrealxu/ unrealengine5-skills --skill ue5-save-load-replication安装后在 Claude Code 中输入/ue5-save-load-replication确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/project-adapter.mdreplication-checklist.mdsavegame-schema-pattern.md详细介绍
快速开始
- 定义必须持久化的内容和必须复制的内容。
- 将本地保存状态与网络运行时状态分开。
- 输出数据架构、保存流程、加载流程和网络流程。
API 锚点(UE5.6-UE5.8)
- 保存管线锚点:
USaveGameUGameplayStatics::CreateSaveGameObject(...)UGameplayStatics::SaveGameToSlot(...)、LoadGameFromSlot(...)UGameplayStatics::AsyncSaveGameToSlot(...)、AsyncLoadGameFromSlot(...)
- 复制锚点:
GetLifetimeReplicatedProps(...)DOREPLIFETIME(...)ReplicatedUsing=OnRep_*UFUNCTION(Server/Client/NetMulticast, ...)
- 权限锚点:
- 由服务器权威执行变更的路径
- 客户端请求通过经过验证的服务器 RPC 入口路由
状态约定
- 每个状态字段必须归类为以下类别之一:
- 仅持久化(SaveGame,不复制)
- 仅复制(运行时同步,不持久化)
- 持久化且复制(通过保存恢复的权威状态)
- 每个持久化架构都必须包含:
- 明确的版本整数
- 稳定的标识符/键(避免依赖索引的隐式排序)
- 旧版本的迁移行为
- 每个复制字段都必须定义:
- 复制条件或范围
- 客户端上的
OnRep_*行为 - 服务器写入权限
工作流
1)划分状态
- 按所有权识别游戏状态:本地玩家、世界/共享、比赛/会话。
- 将临时运行时值与持久化值分开。
- 标记每个字段的权威写入路径。
2)保存架构
- 定义带有明确架构版本的保存结构体/对象。
- 为 Actor、组件和类似物品栏的条目使用稳定的键/ID。
- 添加可选的迁移元数据,以实现向后兼容。
3)保存管线
- 按确定性顺序将运行时状态收集到保存架构中。
- 根据延迟敏感度,通过同步或异步槽位 API 写入。
- 返回结构化的保存结果(成功、失败原因、使用的版本)。
4)加载和恢复管线
- 加载保存对象,验证版本,并在需要时执行迁移。
- 按依赖安全的顺序应用恢复(先所有者,后依赖项)。
- 通过明确的回退策略处理缺失的资源/实体。
5)复制管线
- 仅复制客户端可见的运行时状态。
- 使用
DOREPLIFETIME(...)注册复制属性。 - 使用
OnRep_*进行客户端重建/UI 刷新,而非执行权威写入。
6)RPC 权限管线
- 对请求的操作使用客户端到服务器的 RPC。
- 在变更复制状态之前,由服务器验证负载。
- 仅在需要时通过复制/NetMulticast 广播生成的状态。
约束
- 服务器是复制游戏状态的事实来源。
- 应用状态变更前,验证所有客户端请求的操作。
- 保持 SaveGame 架构可版本化;避免脆弱的隐式排序。
- 多人游戏代码路径中不得假设是单人游戏行为。
- 尽可能确保恢复过程幂等(部分失败后可安全重试)。
- 避免持久化仅供网络使用的临时缓存。
故障处理
- 症状:加载成功,但游戏状态不一致。
- 定位:恢复顺序和缺失依赖项的处理。
- 修复:按分阶段的恢复顺序应用所有者、组件和依赖项,并提供回退默认值。
- 症状:更新后旧存档无法使用。
- 定位:架构版本检查和迁移路径。
- 修复:为每个版本添加明确的迁移,或妥善限制不支持的版本。
- 症状:重连后,复制的值与保存的值不同。
- 定位:权威写入路径,以及恢复时机与复制时机之间的关系。
- 修复:先在权威端恢复,再让复制传播到客户端。
- 症状:
OnRep_*频繁触发,导致帧率骤降。- 定位:属性频繁变动和大型负载复制。
- 修复:批量更新,复制粗粒度状态,并在客户端派生细粒度状态。
- 症状:客户端可以触发未授权的状态更改。
- 定位:RPC 验证和权威检查。
- 修复:强制执行服务器验证,并拒绝无效的客户端负载。
- 症状:异步保存/加载回调与游戏状态切换发生竞态。
- 定位:回调生命周期和过期的对象引用。
- 修复:使用状态令牌和世界有效性检查保护回调。
- 症状:部分恢复导致出现孤立的 Actor/组件。
- 定位:失败回滚路径。
- 修复:分阶段执行恢复事务,并在失败时清理已创建的对象。
复制操作
- 客户端需要执行副作用时,使用
ReplicatedUsing。 - RPC 仅用于传递意图,不要将其用作持久状态存储。
- 使用复制来分发权威状态;使用 SaveGame 实现磁盘持久化。
- 绝不要将客户端本地存档数据视为权威的多人游戏输入。
UE5.6-UE5.8 兼容性说明
- 上述 SaveGame 和复制 API 在 UE5.6-UE5.8 中均保持稳定。
- 优先使用稳定的 Engine 运行时 API,而非项目专用的序列化捷径。
- Iris 在 UE5.8 中已可用于生产环境,但不要假设现有的 5.6/5.7 项目已迁移到 Iris;在提供针对特定系统的指导前,先检测项目当前启用的复制系统。
升级处理
- 更改破坏现有存档兼容性策略时,升级处理。
- 复制设计影响反作弊或权威架构决策时,升级处理。
评论
支持 Markdown