前沿:在我的工作期間和學習期間,看過和學過很多單例方法,可謂是奇形怪狀,不過都能實現其功能。今天我將學到的和自己思考出來的單例方法進行一個匯總和分析。
單例一:最簡單的單例方法 A --- 繼承於MonoBehaviour
1.首先創建一個名叫:XXXManager.cs 的腳本,這個腳本就是我們的單例了。這個最簡單的單例方法實現如下:

2.如何調用呢?我們創建一個叫 Main.cs 的腳本來調用它,在其Start()方法里面,調用XXXManager的TestMethod()方法,代碼如下:

3.然后我們需要在Unity的Hierarchy創建兩個組件,分別叫“Main” 和 “XXXManager”,接着把對應的腳本分別掛載上去,例如:Main組件掛載上Main.cs腳本,XXXManager組件掛載XXXManager.cs腳本。

4.運行之后的結果如下:

總結:這應該是最簡單的單例方法了。
單例二:升級版單例方法 B --- 繼承於MonoBehaviour
接下來介紹一種更“規范”一點的單例方法。
1.修改 XXXManager.cs 腳本,其余地方不修改,代碼如下:

2.運行結果如下:

單例三:單例方法 C --- 不繼承於MonoBehaviour
在我們的日常開發中,有的單例方法是不繼承於MonoBehaviour的,不需要將其掛載到GameObject組件上去。這類不需要掛載的。
1.修改 XXXManager.cs 腳本,修改后的腳本如下:

2.因為是不繼承於MonoBehaviour,所以需要將 Hierarchy 面板中,XXXManager上掛載的腳本移除。
3.運行結果為:

總結:上述的單例方法中,我們可以進行歸納。其實就是繼承和不繼承 MonoBehaviour 的單例方法,接下來我們將用到C#語言面向對象的特點(封裝、繼承、多態),對我們的單例進行一個更好的規范。
單例四:最終版D --- 繼承於MonoBehaviour(不隨着場景切換而銷毀)
1.首先,我們將寫一個基類,這個基類實現了單例方法,並且不隨着場景的切換而銷毀。腳本如下:

2.修改 XXXManager.cs 腳本,修改后的腳本如下:

3.運行結果:

單例五:最終版E --- 不繼承於MonoBehaviour(不隨着場景切換而銷毀)
1.首先,寫一個基類,腳本如下:

2.修改XXXManager腳本,修改后的腳本如下:

3.運行結果如下:

