猴子原创,欢迎转载。转载请注明: 转载自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;
如果有更好的实现方式,可以推荐下哦。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-02 18:53:01