本文实现一个在无需使用Command模式和Momento模式下实现撤销、重做功能
源码下载地址:点击打开链接
先展示下效果图
使用栈方式,将各个操作的撤销/恢复操作存储下来
当执行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颜色值的回滚
效果图如下
按下Z,回退颜色由blue->green->red
按下R,恢复颜色由red->green->blue