undopro是一个集成到Unity的默认系统中的基于命令的撤消系统。这允许开发人员在不强迫用户进入新的撤消工作流的情况下使用动作进行撤消/重做操作!
论坛线程
根据您如何使用dopro /分发工具的方式,您有几个选择。
Unity仅提供有关撤消系统的非常有限的信息:
在内部,当调用用于添加基于命令的记录的API时,dopro在默认系统中创建虚拟记录。然后使用可用回调跟踪此操作,并在分别从重做堆栈或另一种方式切换时执行命令。一个很大的障碍是默认撤消系统的行为:这几乎是不可预测的!当撤消/重做或消失时,记录可能会在某些条件下复制。这非常困难,但是必须进行坚实的跟踪算法。显然,还必须检测到新记录。
跟踪完成后,计算撤消和重做堆栈的移位值(请记住,记录在撤消/重做过程中可能会消失或重复!)。然后对内部记录进行相应的更新,并概述了“撤消/重做的记录”。
在所有这些过程中,调用了indundoperformed/onredoperformed/onaddundorecord的其他回调。
序列化也是一个很大的问题,因为行动甚至更糟的匿名动作都难以序列化。 undopro在当前场景中维护一个隐藏的,临时的游戏对象,该场景拥有所有需要序列化的自定义记录。序列化是由一些包装器类实现的,这些类别巧妙地处理了操作,对象,方法等的所有组合。
该系统甚至可以通常使用! - >支持所有可序列化对象(unityEngine.Object和system.Object)和不可启动的对象部分(一层可序列化的构件序列化),所有其他对象都会默认 - >支持最匿名的操作(尚未找到难以验证的操作)!您可以完全使用上下文并参考几乎所有本地变量(上面概述的条件适用)!
这个系统似乎确实可靠,但我不声称它是完全防弹的!当它弄乱跟踪时,可能发生的最坏情况是,您的记录被少量抵消(操作是在/之前/之前执行一个或两个记录)。目前尚未知道幸运的情况,但我对任何失败都不承担任何责任!如果您设法打破它,请通知我,并为我提供您所做的事情(通过问题),我尝试解决此问题:)
只需将undopro文件夹放在项目中的某个地方,就可以了!即使它不必在编辑器文件夹中,但这并不意味着您可以在运行时使用它!在运行时将需要编辑器API的功能由预处理器检查排除。另一方面,在编辑器文件夹中,您会发现两个有用的窗口来测试1的功能。撤消系统本身和2。动作序列化系统。除了这些窗口外,您还可以轻松地调试系统,以查看它是如何通过不使用#Define undo_debug在Unpopromanager中的工作的!为了为自己的项目使用“操作序列化系统”,只需复制文件夹undopro/serializableAction以及许可证!
开发人员的API非常简单。添加undopro依赖性,然后使用Unepropomanager与系统相互作用。重要元素:
建议:如果您计算了某些内容或执行了具有中间结果的任何操作,则可以很容易地设置此结果,只要结果可序列化即可。与其重新计算在撤消/重做动作中,只是在撤消动作中设置了先前的序列化结果,而在重做动作中则设置了新的动作。完毕!
此扩展名是由Seneral创建的,并根据MIT许可发布(在License.MD中进一步指定)