Unity实现运行时撤销(undo)功能浅谈

本文地址:https://blog.csdn.net/t163361/article/details/141352178

项目最近想要加入撤销功能。想要比较完美的实现撤销功能,需要两个基础
1.添加和删除使用命令模式
2.基础数据支持序列化
项目框架使用的QFramework,支持简单的命令模式。数据部分引入了领域驱动的概念,数据和表现分离的比较干净,只需要对数据部分进行序列化就行了,这部分可以用json也可以用其他的序列化形式。
命令模式
需要实现原子命令和复合命令。
例如删除场景中一批选中的物体,就需要使用复合命令,把相关的操作拆分成原子命令组合;这样撤销的时候可以一次性将所有物体恢复。
序列化
主要是为了在删除物体时可以完整的再次重建。
具体的实现就不赘述了,可以看下面列出来的参考文章和项目
撤销(Undo)
针对UI的撤销,有可能还需要实现针对某个窗口的撤销。全局窗口通用一套撤销功能,弹出窗口使用局部撤销行为。

文章

参考项目

真实项目

Unity

  • RuntimeUndoRedo
    简单好用的撤销功能
    基于Action的录制行为,可以很方便的和命令模式集成
    支持事务机制
    最终引入了这个方案
  • RundoUnityRuntimeEditor
    基于命令模式的撤销恢复机制
    很漂亮的框架
  • Runtime Editor
    状态很完善
    支持命令组
  • UndoRedoBlog
    命令继承Command包含Excute和Undo两个接口
    CommandPool中集成了命令执行和撤销功能
  • UndoPro
    针对Unity编辑器的撤销功能

C#

  • Undo-redo Manager
    项目分析了三种撤销类型的性能对比
  • OOPS
    AccumulatorManager支持多个撤销实例
    Accumulator 行为栈
  • Memento
    基于属性进行撤销,支持批处理操作
  • Muf
    UndoService提供多个撤销实例管理功能
    UndoRoot支持撤销功能的处理类
    UndoBatch将多个修改整合成一个操作
    通过监控属性变化而不是命令的方式完成的撤销功能
  • DefaultUnDo
    命令继承UnDo包含_doAction和_undoAction两个Action
    UnDoManager中集成了命令执行和撤销功能
    支持事务嵌套
    提供基础类型的Undo功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值