mcpField
U
ue5-save-load-replication

ue5-save-load-replication

github.com/unrealxu开发53347 次安装9 周前更新
代码仓库

关于 ue5-save-load-replication

ue5-save-load-replication 是用于设计 Unreal Engine 5.6–5.8 存档与网络状态流程的技能。它区分持久化数据和运行时复制,并涵盖版本化架构、恢复、权限控制与客户端请求验证。

主要功能

  1. 01区分持久化状态与复制状态
  2. 02设计含稳定键的版本化存档架构
  3. 03规划同步或异步存档流程
  4. 04按依赖安全顺序恢复数据
  5. 05定义复制范围与客户端更新
  6. 06在服务器验证客户端请求

适用场景

  1. 01设计存档兼容与迁移方案
  2. 02在多人游戏中恢复存档状态
  3. 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.yaml
references/
project-adapter.md
replication-checklist.md
savegame-schema-pattern.md

详细介绍

快速开始

  • 定义必须持久化的内容和必须复制的内容。
  • 将本地保存状态与网络运行时状态分开。
  • 输出数据架构、保存流程、加载流程和网络流程。

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_* 行为
    • 服务器写入权限

工作流

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