Unity3d实现回滚操作(Undo和Redo)

时间:2023-01-25 16:51:19

本文实现一个在无需使用Command模式和Momento模式下实现撤销、重做功能

源码下载地址:点击打开链接

先展示下效果图

Unity3d实现回滚操作(Undo和Redo)

使用栈方式,将各个操作的撤销/恢复操作存储下来

Unity3d实现回滚操作(Undo和Redo)

当执行undo和redo操作时,执行栈里面的撤销/恢复操作

Unity3d实现回滚操作(Undo和Redo)

Demo操作实现

using UndoMethods;using UnityEngine;

public class MyText : MonoBehaviour
{
private Color color;

private void Start()
{
//随机添加10种颜色
for (int i = 0; i < 3; i++)
{
switch (i)
{
case 0:color = Color.red;break;
case 1:color = Color.green;break;
case 2:color = Color.blue;break;
default:break;
}
SetColor(color);
}
}

private void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
UndoRedoManager.Instance().Redo();
}
else if (Input.GetKeyDown(KeyCode.Z))
{
UndoRedoManager.Instance().Undo();
}
}

private void SetColor(Color color)
{
//存储上一次Cube颜色
UndoRedoManager.Instance().Push(p => SetColor(p), this.GetComponent<Renderer>().material.color, "新增颜色");
this.GetComponent<Renderer>().material.color = color;
}
}

简单的实现了一个Cube颜色值的回滚

效果图如下

Unity3d实现回滚操作(Undo和Redo)

按下Z,回退颜色由blue->green->red

按下R,恢复颜色由red->green->blue


原文地址:blog.liujunliang.com.cn