1.单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。 - -百度百科
- 在unity中有多个场景时需要保存之前场景的状态或者获取之前场景的数据,所以需要一种方法在整个游戏范
围内 保存用到的数据。
方法:创建一个GlobalObject,这个GlobalObject需要满足的条件如下:
- 在整个游戏中只有一个,并且是同一个
- 保证只被初始化一次
- 在任何脚本中都可以访问GlobalObject中存放的数据
- GlobalObject中可以存放任何数据
实现步骤:
- 创建空物体GlobalObject
- 创建GlobalControl C#脚本
- 将脚本赋给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);
}
}
}
通过以上脚本即可保证单例模式
使用方法:
- 保存数据:
假设有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;
}
}
- 访问数据:
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. 使用静态类
静态类一般只能在一个场景范围内传递数据