管理各種管理器 ///為什麼需要單例 ///單例模式核心在於對於某個單例類,在系統中同時只存在唯一一個實例,並且該實例容易被外界所訪問; ///避免創建過多的對象,意味著在記憶體中,只存在一個實例,減少了記憶體開銷; using System.Collections; using System.Coll ...
管理各種管理器
///為什麼需要單例
///單例模式核心在於對於某個單例類,在系統中同時只存在唯一一個實例,並且該實例容易被外界所訪問;
///避免創建過多的對象,意味著在記憶體中,只存在一個實例,減少了記憶體開銷;
using System.Collections; using System.Collections.Generic; using UnityEngine; namespace ARPG { ///<summary> /// 管理各種管理器 ///</summary> ///為什麼需要單例 ///單例模式核心在於對於某個單例類,在系統中同時只存在唯一一個實例,並且該實例容易被外界所訪問; ///避免創建過多的對象,意味著在記憶體中,只存在一個實例,減少了記憶體開銷; public class SingerMonoManager<T>: MonoBehaviour where T:SingerMonoManager<T> { //第一種方法單例 //public static T instance { get; private set; } //public void Awake() //{ // instance = this as T; //} //第二種方法單例 //按需實例 //public static T instance { get; private set; } //public static T GetInstance() //{ // if (instance==null) // { // instance = FindObjectOfType<T>(); // //在場景種查找該類型的實例對象 // if (instance==null) // { // instance = new GameObject("singer" + typeof(T).Name).AddComponent<T>(); // } // } // return instance; //} //第三種方法單例 //市面上項目最常見單例模式的第二種和第三種 private static T instance; public static T Instance { get { if (instance==null) { instance = FindObjectOfType<T>(); if (instance==null) { instance = new GameObject("Singer" + typeof(T).Name).AddComponent<T>(); } } return instance; } set { instance = value; } } } }SingerMonoManager