50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| using System.Collections;
 | |
| 
 | |
| namespace Touka.GameLogic {
 | |
|     /// <summary>
 | |
|     /// 单例类
 | |
|     /// </summary>
 | |
|     /// <typeparam name="T"></typeparam>
 | |
|     public class ToukaSingleton<T> where T : MonoBehaviour
 | |
|     {
 | |
|         private static T _instance;
 | |
| 
 | |
|         public static T GetInstance()
 | |
|         {
 | |
|             if (null == _instance)
 | |
|             {
 | |
|                 _instance = Object.FindObjectOfType(typeof(T)) as T;
 | |
|                 if (null != _instance) return _instance;
 | |
| 
 | |
|                 GameObject container = new GameObject
 | |
|                 {
 | |
|                     name = typeof(T).ToString()
 | |
|                 };
 | |
|                 container.hideFlags = HideFlags.HideInHierarchy;
 | |
|                 _instance = container.AddComponent(typeof(T)) as T;
 | |
|                 Object.DontDestroyOnLoad(container); 
 | |
|             }
 | |
|             return _instance;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public abstract class ToukaSingletonMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour
 | |
|     {
 | |
|         public static T Instance
 | |
|         {
 | |
|             get { return ToukaSingleton<T>.GetInstance(); }
 | |
|         }
 | |
| 
 | |
|         public static T GetInstance()
 | |
|         {
 | |
|             return ToukaSingleton<T>.GetInstance();
 | |
|         }
 | |
| 
 | |
|         public virtual void Dispose()
 | |
|         {
 | |
| 
 | |
|         }
 | |
|     }
 | |
| }
 |