发起者(需要保存状态的对象)-》创建备忘录给-》备忘录管理者保存
发起者(需要恢复状态的对象)=》通过备忘录管理者-》获取到指定的状态
//备忘录
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"));
}
}