您的位置:首页 > 移动开发 > Unity3D

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

2017-08-30 12:27 585 查看
本文实现一个在无需使用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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: