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
源码下载地址:点击打开链接
先展示下效果图
使用栈方式,将各个操作的撤销/恢复操作存储下来
当执行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
相关文章推荐
- 纯javascript对撤销和重写(undo、redo)的完美实现,适用于任何页面元素操作
- [原创]文本编辑中利用栈来实现undo和redo的无限次操作
- Undo/Redo几种实现方式介绍(三)——保存操作方式
- 无操作次数限制的 Undo/Redo 实现方案
- Redo Undo 的三种实现
- iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
- 为SWT的StyledText添加Undo/Redo操作以及对快捷键动作绑定的支持
- 在Batik中使用DOM MutationEvent实现SVG绘图的Undo/Redo
- 对比DML操作产生的REDO及UNDO大小
- 用Command模式简单的实现Undo&Redo功能
- redo和undo事务提交和回滚
- 命令模式实现 Undo Redo
- 使用设计模式实现Undo,Redo框架
- Undo/Redo实现
- Command模式实现撤销重做(Undo/Redo)
- 撤销(undo)和重做(redo)的C++完美实现
- 使用Java来实现编辑器的Undo Redo功能
- UNDO REDO实现
- Arcgis Engine9.2 Undo 和 Redo 功能实现
- DEBUG:JDBC建立了事务,操作失败,却没能实现回滚的问题