【发布时间】:2020-02-13 14:55:15
【问题描述】:
我正在尝试在运行时设置撤消/重做系统,但无法让我的代码正常工作。我创建了一个撤消按钮,但是当我移动我的游戏对象并按下撤消按钮时,游戏对象并没有回到它的原始状态。
我只是想让最终用户在运行时而不是在编辑器模式期间撤消/重做他的最新操作。我进行了几次尝试并尝试了许多不同的脚本,但没有取得任何进展。有什么建议么?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class undoit : MonoBehaviour
{
public class setting
{
public GameObject Obj;
public Vector3 Pos;
public Quaternion Rot;
public bool Deleted;
public void Restore()
{
Obj.transform.position = Pos;
Obj.transform.rotation = Rot;
Obj.SetActive(Deleted);
}
public setting(GameObject g)
{
Obj = g;
Pos = g.transform.position;
Rot = g.transform.rotation;
Deleted = g.activeSelf;
}
}
public List<setting> UndoList;
public void AddUndo(GameObject g)
{
setting s = new setting(g);
UndoList.Add(s);
}
public void Undo()
{
if (UndoList.Count > 0)
{
UndoList[UndoList.Count - 1].Restore();
UndoList.RemoveAt(UndoList.Count - 1);
}
}
void Start()
{
UndoList = new List<setting>();
}
}
【问题讨论】:
-
你确定你每一步都记住了所有改变的东西吗?
-
我现在只想改一步,看看代码能不能用。
-
好吧,1 个或多个,如果您不记得更改之前的所有状态,以及要放回什么... 1 个或多个无关紧要
-
我假设我的代码太简单而无法使用撤消...
-
我对此表示怀疑,无论它多么复杂或简单,您都需要记住所有之前的内容,然后返回它.. 仅存储某些信息,您并不清楚您更改了什么,可能还有更多……你也没有解释它是如何不起作用的
标签: c# unity3d system undo-redo