猴子原创,欢迎转载。转载请注明: 转载自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;
如果有更好的实现方式,可以推荐下哦。
版权声明:本文为博主原创文章,未经博主允许不得转载。
Unity Singleton 单例类(Unity3D开发之二十)
原文地址:http://blog.csdn.net/cocos2der/article/details/47335197