UE5运行时操作撤销系统插件

🔗插件功能演示解说视频

📋 插件概述

CYS_RevokeTool 是一个为虚幻引擎5开发的运行时撤销系统插件。它允许在游戏运行过程中(包括PIE测试模式和打包后的游戏)记录玩家或系统对游戏对象的各种操作,并支持随时撤销这些操作,将对象恢复到之前的状态。


🎯 主要功能

1. 属性修改的记录与撤销

可以记录并撤销对象的任何属性变化,包括但不限于:

  • 位置、旋转、缩放 → 移动了物体后可以撤销回原位
  • 材质和颜色 → 改变了物体颜色或材质后可以恢复
  • 自定义属性 → 游戏中定义的任何属性都可以被追踪

💡 使用场景举例:

  • 建造游戏中移动家具位置后撤销
  • 绘画工具中修改颜色后撤销
  • 策略游戏中移动单位后悔棋

2. 对象创建的撤销

记录新创建对象的操作,撤销时会删除该对象。

💡 使用场景举例:

  • 建造模式中放置了错误的建筑物,撤销即可删除
  • 关卡编辑器中生成了不需要的道具

3. 对象删除的撤销

这是最强大的功能之一!

当你删除一个对象前先记录删除操作,撤销时系统会完整地重建这个对象,包括它的所有属性、材质、位置等信息。

💡 使用场景举例:

  • 不小心删除了重要的游戏对象
  • 建造游戏中误拆除了建筑
  • 需要"回收站"功能的任何场景

4. 批量操作支持

可以同时记录多个对象的修改,一次撤销就能恢复所有对象。

💡 使用场景举例:

  • 同时移动了多个单位后一键撤销
  • 批量修改了多个物体的颜色后恢复

5. 智能引用管理 🧠

这是插件的核心技术优势。当对象被删除后重建,内存地址会改变,普通的引用会失效。插件提供了智能引用系统,自动追踪对象的"转世",确保你始终能找到正确的对象。

✅ 解决的问题:

  • 删除后撤销重建的对象,蓝图中的引用自动更新
  • 多次删除撤销后,系统仍能正确追踪对象
  • 避免了"空引用"导致的游戏崩溃

📊 蓝图函数列表

记录操作类函数

函数名 功能说明 参数说明 典型用途
RecordSingleModify 记录单个对象的修改 Object: 要记录的对象 Description: 操作描述文字 记录移动、旋转、属性修改等操作
RecordBatchModify 记录多个对象的修改 Objects: 对象数组 Description: 操作描述文字 批量修改多个物体时使用
RecordObjectCreation 记录对象创建 Object: 新创建的对象 Description: 操作描述文字 在生成新物体后调用
RecordObjectDeletion 记录对象删除 Object: 即将删除的对象 Description: 操作描述文字 ⚠️ 在删除物体之前调用

撤销控制类函数

函数名 功能说明 返回值 典型用途
Undo 执行撤销操作 布尔值: 是否成功撤销 绑定到撤销按键或UI按钮
CanUndo 检查是否可以撤销 布尔值: 是否有可撤销的操作 控制撤销按钮的启用状态
GetUndoHistory 获取历史记录列表 字符串数组: 所有操作的描述 显示操作历史UI
ClearHistory 清空所有历史记录 场景切换时清理内存

引用管理类函数

函数名 功能说明 参数说明 返回值 典型用途
GetValidObject 获取对象的有效引用 Object: 可能已失效的对象引用 有效的对象引用 (失败返回空) 在操作对象前更新引用

🔄 工作流程说明

场景一:移动物体并支持撤销 📦

  1. ▶️ 玩家按下移动键
  2. 🎯 获取要移动的物体
  3. 🚀 执行移动操作
  4. 💾 调用 "记录单个对象修改" 函数
  5. ↩️ 玩家按下撤销键时,物体回到移动前的位置

场景二:删除物体并支持撤销 🗑️

  1. 🎯 玩家选中要删除的物体
  2. ⚠️ 调用 "记录对象删除" 函数(必须在删除前!
  3. 💥 执行删除操作
  4. ↩️ 玩家按下撤销键时,物体完整恢复

场景三:创建物体并支持撤销

  1. 🎨 玩家选择创建新物体
  2. ✨ 生成新物体
  3. 💾 调用 "记录对象创建" 函数
  4. ↩️ 玩家按下撤销键时,新物体被删除

⚙️ 系统设计特点

1. 完整的状态保存 💾

插件会保存对象的所有重要信息:

  • 基础信息: 对象类型、名称、所属关系
  • 变换数据: 位置、旋转、缩放
  • 材质数据: 包括动态材质的参数、颜色、纹理
  • 组件数据: 网格体、物理属性等
  • 自定义属性: 游戏逻辑中定义的各种数据

2. 历史记录管理 📚

  • 📌 默认保存最近50条操作记录
  • 📋 可以查看所有历史操作的描述
  • 🧹 支持一键清空历史(如场景切换时)
  • ♻️ 自动清理过旧的记录防止内存占用过大

3. 智能内存管理 🧠

  • 🔗 使用弱引用避免阻止对象被垃圾回收
  • 🧹 自动清理无效的映射关系
  • ⚡ 缓存查找结果提升性能
  • 🛡️ 循环检测防止死锁

4. 调试友好 🔍

  • 📊 三级日志系统:错误/信息/详细
  • 🗺️ 可以打印对象映射关系
  • 🔗 可以追踪对象的完整映射链
  • 📝 详细的操作描述帮助定位问题

💡 应用场景

🏗️ 关卡编辑器

构建游戏内的关卡编辑器时,撤销功能是必不可少的:

  • 放置物体后撤销
  • 删除物体后撤销
  • 修改物体属性后撤销
  • 批量操作的撤销

🏘️ 建造/沙盒游戏

玩家需要频繁尝试不同的布局:

  • 建筑位置调整
  • 装饰物摆放试错
  • 地形编辑撤销

♟️ 策略/棋类游戏

提供悔棋功能:

  • 移动单位后悔棋
  • 建造选择撤销
  • 战术调整

🎨 绘画/设计工具

创意类应用必备:

  • 笔刷操作撤销
  • 颜色修改撤销
  • 图层操作撤销

📚 教学/演示

记录操作步骤便于回溯:

  • 演示错误操作
  • 教学中的步骤回退
  • 对比不同方案

⚠️ 使用注意事项

关键要点 🎯

  1. ⚠️ 删除前必须先记录

    调用"记录对象删除"必须在实际删除之前,否则无法保存对象信息

  2. 🔗 及时更新引用

    涉及删除撤销的场景,每次操作对象前都应该先调用"获取有效对象"更新引用

  3. 📝 合理的操作描述

    给每个操作起个清晰的名字,方便查看历史和调试

  4. 🧹 适时清理历史

    场景切换或重新开始游戏时,记得清空历史记录释放内存

  5. ⚡ 考虑性能影响

    频繁记录大量对象的修改会占用内存和CPU,建议合理控制记录频率


最佳实践建议

  • ✅ 为每个操作提供有意义的描述,如 "移动建筑到(100, 200)" 而不是 "修改"
  • ✅ 在关键的游戏状态变化点清理历史,如关卡切换
  • ✅ 批量操作时使用批量记录函数而不是循环调用单个记录
  • ✅ 测试阶段开启详细日志,发布时关闭以提升性能
  • ✅ 定期检查历史记录数量,避免无限增长

📈 性能与限制

💾 内存占用

  • 📦 每条记录包含完整的对象快照
  • 📊 默认最多保存50条历史
  • 🎮 大型对象(如复杂网格体)会占用更多内存
  • ⚙️ 建议根据游戏需求调整历史记录上限

🎮 总结

CYS_RevokeTool 提供了一个强大而易用的运行时撤销系统,让游戏开发者可以轻松为玩家提供撤销功能,提升用户体验。

无论是建造游戏、关卡编辑器还是任何需要撤销功能的应用,这个插件都能提供可靠的技术支持。

通过完整的对象快照智能的引用管理友好的蓝图接口,开发者可以在几分钟内为游戏添加专业级的撤销功能,而无需深入了解复杂的底层实现细节。

相关推荐
远离UE42 天前
UE5 母材质 编写笔记
笔记·ue5·材质
远离UE42 天前
UE5 HLSLTranslator 与 ShaderCompiler
ue5
1204157137 肖哥3 天前
UE5.7 场景打光管线流程_【雪山】
ue5
weixin_404679313 天前
虚幻5 替代小白人角色的完整逻辑
ue5
1204157137 肖哥6 天前
UE5.7 灯光详解
ue5
狂云歌7 天前
AI写UE的3Dgame
人工智能·3d·ue5·游戏程序
日月云棠11 天前
UE5源码分析之Editor——Blutility模块全面分析
ue5
日月云棠11 天前
UE5源码分析之Editor——BehaviorTreeEditor模块全面分析
ue5
日月云棠11 天前
UE5源码分析之Editor——AssetTagsEditor模块全面分析
ue5
远离UE412 天前
UE5 显存 虚拟内存 深入学习笔记
笔记·学习·ue5