| 
									
										
										
										
											2025-08-30 09:24:58 +00:00
										 |  |  |  | using UnityEngine; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-31 13:19:46 +00:00
										 |  |  |  | namespace Script.Utils | 
					
						
							| 
									
										
										
										
											2025-08-30 09:24:58 +00:00
										 |  |  |  | { | 
					
						
							|  |  |  |  |     public abstract class NormalSingleton<T> where T : new() | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         private static T mInstance; | 
					
						
							|  |  |  |  |         public static T Instance | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (mInstance == null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     mInstance = new T(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 return mInstance; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     /// <summary> | 
					
						
							|  |  |  |  |     /// 动态(Dynamic) | 
					
						
							|  |  |  |  |     /// </summary> | 
					
						
							|  |  |  |  |     public abstract class D_MonoSingleton<T> : MonoBehaviour where T : D_MonoSingleton<T> | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         private static T mInstance = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         public static T Instance | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 if (mInstance == null) | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     GameObject tFramewokGo = GameObject.Find("TKFramework"); | 
					
						
							|  |  |  |  |                     if (tFramewokGo == null) | 
					
						
							|  |  |  |  |                     { | 
					
						
							|  |  |  |  |                         tFramewokGo = new GameObject("TKFramework"); | 
					
						
							|  |  |  |  |                         DontDestroyOnLoad(tFramewokGo); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  |                     GameObject tGo = new GameObject(); | 
					
						
							|  |  |  |  |                     tGo.transform.SetParent(tFramewokGo.transform); | 
					
						
							|  |  |  |  |                     tGo.name = typeof(T).ToString(); | 
					
						
							|  |  |  |  |                     tGo.transform.localPosition = Vector3.zero; | 
					
						
							|  |  |  |  |                     tGo.transform.localEulerAngles = Vector3.zero; | 
					
						
							|  |  |  |  |                     tGo.transform.localScale = Vector3.one; | 
					
						
							|  |  |  |  |                     mInstance = tGo.AddComponent<T>(); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 return mInstance; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected Transform mTrans; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void Awake() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mTrans = transform; | 
					
						
							|  |  |  |  |             Initialize(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected virtual void Initialize() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void OnDestroy() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mInstance = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Dispose(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected virtual void Dispose() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     /// <summary> | 
					
						
							|  |  |  |  |     /// 静态(static) | 
					
						
							|  |  |  |  |     /// </summary> | 
					
						
							|  |  |  |  |     public abstract class S_MonoSingleton<T> : MonoBehaviour where T : S_MonoSingleton<T> | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         private static T mInstance = null; | 
					
						
							|  |  |  |  |         public static T Instance | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return mInstance; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void Awake() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (mInstance != null && mInstance != (T)this) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 Destroy(gameObject); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             mInstance = (T)this; | 
					
						
							|  |  |  |  |             Initialize(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected virtual void Initialize() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void OnDestroy() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mInstance = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Dispose(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected virtual void Dispose() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     /// <summary> | 
					
						
							|  |  |  |  |     /// 静态常驻 | 
					
						
							|  |  |  |  |     /// </summary> | 
					
						
							|  |  |  |  |     public abstract class O_MonoSingleton<T> : MonoBehaviour where T : O_MonoSingleton<T> | 
					
						
							|  |  |  |  |     { | 
					
						
							|  |  |  |  |         private static T mInstance = null; | 
					
						
							|  |  |  |  |         public static T Instance | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             get | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 return mInstance; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void Awake() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             if (mInstance != null && mInstance != (T)this) | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 Destroy(gameObject); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             mInstance = (T)this; | 
					
						
							|  |  |  |  |             DontDestroyOnLoad(gameObject); | 
					
						
							|  |  |  |  |             Initialize(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected virtual void Initialize() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         private void OnDestroy() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  |             mInstance = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             Dispose(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         protected virtual void Dispose() | 
					
						
							|  |  |  |  |         { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | } |