猴子原創,歡迎轉載。轉載請註明: 轉載自Cocos2Der-CSDN,謝謝!
原文地址: http://blog.csdn.net/cocos2der/article/details/47335197
今天看到羣裏有朋友問unity單例的最佳實現方式,下面我我經常用的。貼出來供大家參考。
一、添加單例模板類
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T _instance;
private static object _lock = new object ();
public static T Instance
{
get {
if (applicationIsQuitting) {
return null;
}
lock (_lock) {
if (_instance == null) {
_instance = (T)FindObjectOfType (typeof(T));
if (FindObjectsOfType (typeof(T)).Length > 1) {
return _instance;
}
if (_instance == null) {
GameObject singleton = new GameObject ();
_instance = singleton.AddComponent<T> ();
singleton.name = "(singleton) " + typeof(T).ToString ();
DontDestroyOnLoad (singleton);
}
}
return _instance;
}
}
}
private static bool applicationIsQuitting = false;
public void OnDestroy ()
{
applicationIsQuitting = true;
}
}
這是一個單例模板類,使用就很簡單了。
二、定義自己的單例類
using UnityEngine;
using System;
public class GameManager : Singleton<GameManager> {
public float score;
void Awake () {
this.Init();
}
private void Init() {
// Init code
}
}
三、調用使用
GameManager.Instance.score = 99;
如果有更好的實現方式,可以推薦下哦。