发起者(需要保存状态的对象)-》创建备忘录给-》备忘录管理者保存
发起者(需要恢复状态的对象)=》通过备忘录管理者-》获取到指定的状态
//备忘录 using UnityEngine; public class Memento { private Vector3 saveV; private string name; public Memento(Vector3 v) { saveV = v; } public Vector3 GetData() { return saveV; } public void SetName(string n) { name = n; } }
//发起者 using UnityEngine; public class Player : MonoBehaviour { public void Set(Vector3 v) { this.transform.position = v; } public Memento SaveToMemento() { Debug.Log("保存当前位置"); return new Memento((Vector3)transform.position); } public void RestoreFromMemento(Memento m) { Debug.Log("恢复到位置:" + m.GetData()); transform.position = m.GetData(); } }
//备忘录管理者 using System.Collections.Generic; using UnityEngine; public class MementoManager { private Dictionary<string, Memento> dic = new Dictionary<string, Memento>(); public void AddMemento(string name,Memento m) { if (!dic.ContainsKey(name)) dic.Add(name, m); } public Memento GetMomento(string name) { if (dic.ContainsKey(name)) return dic[name]; return null; } }
//测试使用 using UnityEngine; public class testMemento : MonoBehaviour { void Start () { Player player = this.GetComponent<Player>(); MementoManager manager = new MementoManager(); manager.AddMemento("o",player.SaveToMemento()); player.Set(new Vector3(10, 3, 5)); player.RestoreFromMemento(manager.GetMomento("o")); } }