1.单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。 - -百度百科

  • 在unity中有多个场景时需要保存之前场景的状态或者获取之前场景的数据,所以需要一种方法在整个游戏范

围内 保存用到的数据。

方法:创建一个GlobalObject,这个GlobalObject需要满足的条件如下:

  1. 在整个游戏中只有一个,并且是同一个
  2. 保证只被初始化一次
  3. 在任何脚本中都可以访问GlobalObject中存放的数据
  4. GlobalObject中可以存放任何数据

实现步骤:

  1. 创建空物体GlobalObject
  2. 创建GlobalControl C#脚本
  3. 将脚本赋给GlobalObject

GlobalControl脚本代码:

public class GlobalControl : MonoBehaviour {

    public static GlobalControl Instance;

    //要保存使用的数据;
    public int HP;
	public int MP;
	public int EXP;
   
   //初始化
    private void Awake()
    {
         if(Instance==null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
         else
        {
            Destroy(gameObject);
        }
    }
}


通过以上脚本即可保证单例模式

使用方法:

  1. 保存数据:
    假设有Player类需要保存数据:
public class Player:MonoBehaviour
{
	Public int HP;
	Public int MP;
	Public int EXP;

	......// other functions

	Public void SavaData()
	{
		GlobalControl.Instance.HP=HP;
		GlobalControl.Instance.MP=MP;
		GlobalControl.Instance.EXP=EXP;
	}

}

  1. 访问数据:
public class Player:MonoBehaviour
{
	Public int HP;
	Public int MP;
	Public int EXP;

	......// other functions

	void Start()
	{
		HP=GlobalControl.Instance.HP;
		MP=GlobalControl.Instance.MP;
		EXP=GlobalControl.Instance.EXP;
	}

}

2. 使用PlayerPrefs类

PlayerPrefs类是unity自带的类,功能是在场景会话之间访问玩家属性。

常用方法有保存数据和访问数据:

PlayerPrefs.SetInt 、PlayerPrefs.SetFloat、PlayerPrefs.SetString
PlayerPrefs.GetInt 、PlayerPrefs.GetFloat、PlayerPrefs.GetString

例:
保存血量值

保存:PlayerPrefs.SetInt("player hp",100);
获取:PlayerPrefs.GetInt("player hp");

3. 使用静态类

静态类一般只能在一个场景范围内传递数据