Unity 游戲框架搭建 (三) MonoBehaviour單例的模板

上一篇文章講述了如何設計C#單例的模板。也隨之拋出了問題:

如何設計接收MonoBehaviour生命周期的單例的模板?

如何設計?

先分析下需求:

1.約束腳本實例對象的個數。

2.約束GameObject的個數。

3.接收MonoBehaviour生命周期。

4.銷毀單例和對應的GameObject。

首先,第一點,約束腳本實例對象的個數,這個在上一篇中已經實現(xiàn)了。

但是第二點,約束GameObject的個數,這個需求,還沒有思路,只好在游戲運行時判斷有多少個GameObject已經掛上了該腳本,然后如果個數大于1拋出錯誤即可。

第三點,通過繼承MonoBehaviour實現(xiàn),只要覆寫相應的回調方法即可。 第四點,在腳本銷毀時,把靜態(tài)實例置空。 完整的代碼就如下所示

usingUnityEngine;

///

/// 需要使用Unity生命周期的單例模式

///

namespaceQFramework {

publicabstractclassQMonoSingleton : MonoBehaviour where T : QMonoSingleton

{

protectedstaticT instance =null;

publicstaticT Instance()

{

if(instance ==null)

{

instance = FindObjectOfType();

if(FindObjectsOfType().Length > 1)

{

QPrint.FrameworkError ("More than 1!");

returninstance;

}

if(instance ==null)

{

stringinstanceName =typeof(T).Name;

QPrint.FrameworkLog ("Instance Name: "+ instanceName);

GameObject instanceGO = GameObject.Find(instanceName);

if(instanceGO ==null)

instanceGO =newGameObject(instanceName);

instance = instanceGO.AddComponent();

DontDestroyOnLoad(instanceGO);//保證實例不會被釋放

QPrint.FrameworkLog ("Add New Singleton "+ instance.name +" in Game!");

}

else

{

QPrint.FrameworkLog ("Already exist: "+ instance.name);

}

}

returninstance;

}

protectedvirtualvoidOnDestroy()

{

instance =null;

}

}

}

總結:

目前已經實現(xiàn)了兩種單例的模板,一種是需要接收Unity的生命周期的,一種是不需要接收生命周期的,可以配合著使用。雖然不是本人實現(xiàn)的,但是用起來可是超級爽快,2333。

附:[我的框架地址](https://github.com/liangxiegame/QFramework)

轉載地址:[涼鞋的筆記](http://liangxiegame.com/)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容