120 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| 
 | |
| /// <summary>
 | |
| /// 动态(Dynamic)
 | |
| /// </summary>
 | |
| public abstract class D_MonoSingleton<T> : MonoBehaviour where T : D_MonoSingleton<T> 
 | |
| {
 | |
| 	private static T _instance = null;
 | |
| 
 | |
| 	public static T Instance
 | |
| 	{
 | |
|         get {
 | |
|             if (_instance == null)
 | |
|             {
 | |
|                 GameObject go = new GameObject();
 | |
|                 DontDestroyOnLoad(go);
 | |
|                 go.name = "MonoSingleton:" + typeof(T).ToString();
 | |
|                 go.transform.localPosition = Vector3.zero;
 | |
|                 go.transform.localEulerAngles = Vector3.zero;
 | |
|                 go.transform.localScale = Vector3.one;
 | |
|                 _instance = go.AddComponent<T>();
 | |
|             }
 | |
|             return _instance;
 | |
|         }
 | |
| 	}
 | |
|     private void Awake()
 | |
|     {
 | |
|         Initialize();
 | |
|     }
 | |
| 
 | |
|     protected virtual void Initialize()
 | |
|     {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     private void OnDestroy()
 | |
|     {
 | |
|         _instance = null;
 | |
| 
 | |
|         Dispose();
 | |
|     }
 | |
| 
 | |
|     protected virtual void Dispose()
 | |
|     {
 | |
| 
 | |
|     }
 | |
| }
 | |
| 	
 | |
| /// <summary>
 | |
| /// 静态(static)
 | |
| /// </summary>
 | |
| public abstract class S_MonoSingleton<T> : MonoBehaviour where T : S_MonoSingleton<T> 
 | |
| {
 | |
| 	private static T _instance = null;
 | |
| 	public static T Instance
 | |
|     {
 | |
|         get
 | |
|         {
 | |
|             return _instance;
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 	private void Awake()
 | |
| 	{
 | |
| 		if (_instance != null && _instance != (T)this)
 | |
|         {
 | |
| 			Destroy (gameObject);
 | |
| 			return;
 | |
| 		}
 | |
| 		_instance = (T)this;
 | |
| 		Initialize ();
 | |
| 	}
 | |
| 
 | |
| 	protected virtual void Initialize() 
 | |
| 	{
 | |
| 
 | |
| 	}
 | |
| 
 | |
|     private void OnDestroy()
 | |
|     {
 | |
|         _instance = null;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /// <summary>
 | |
| /// 静态常驻
 | |
| /// </summary>
 | |
| public abstract class O_MonoSingleton<T> : MonoBehaviour where T : O_MonoSingleton<T>
 | |
| {
 | |
|     private static T _instance = null;
 | |
|     public static T Instance
 | |
|     {
 | |
|         get
 | |
|         {
 | |
|             return _instance;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void Awake()
 | |
|     {
 | |
|         if (_instance != null && _instance != (T)this)
 | |
|         {
 | |
|             Destroy(gameObject);
 | |
|             return;
 | |
|         }
 | |
|         _instance = (T)this;
 | |
|         DontDestroyOnLoad(gameObject);
 | |
|         Initialize();
 | |
|     }
 | |
| 
 | |
|     protected virtual void Initialize()
 | |
|     {
 | |
| 
 | |
|     }
 | |
| 
 | |
|     private void OnDestroy()
 | |
|     {
 | |
|         _instance = null;
 | |
|     }
 | |
| } |