C# 单例
2022-01-26 本文已影响0人
合肥黑
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }
public int Value { get; set; } = 0;
private void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(this);
GameData.Instance.Init();
}
}
}
...
public class JsonData
{
public Player PlayerData = new Player();
public SignData SignData = new SignData();
}
public class GameData
{
private JsonData jsonData = new JsonData();
public JsonData JsonData { get => jsonData; set => jsonData = value; }
#region config文件
public Translations translation = ScriptableObject.CreateInstance<Translations>();
public ExcelQuestionsManager excelQuestions = ScriptableObject.CreateInstance<ExcelQuestionsManager>();
public ExcelDialoguesManager dialoguesManager = ScriptableObject.CreateInstance<ExcelDialoguesManager>();
/// <summary>
/// 加载数据表
/// </summary>
public void LoadCofig()
{
translation = Resources.Load<Translations>("Configs/Translation");
excelQuestions = Resources.Load<ExcelQuestionsManager>("Configs/Questions");
dialoguesManager = Resources.Load<ExcelDialoguesManager>("Configs/Dialogues");
}
#endregion
private static GameData instance;
public static GameData Instance
{
get
{
if (instance == null)
{
instance = new GameData();
}
return instance;
}
}
单例模式在开发过程中十分常见,所以我们经常会使用泛型写一个单例模式的基类,这样我们就可以通过继承该基类轻松实现单例模式,代码如下所示:
public class Singleton<T> : MonoBehaviour where T : Singleton<T>
{
public static T Instance { get; private set; }
protected void Awake()
{
if (Instance == null)
{
Instance = (T) this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
}
我们使用 Singleton 基类实现我们的 GameManager,代码如下所示:
public class GameManager : Singleton<GameManager>
{
public int Value { get; set; } = 0;
}