日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于MonoBehaviour的单例通用规则

發(fā)布時間:2025/3/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于MonoBehaviour的单例通用规则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

長久以來,對于基于MonoBehaviour的單例總是心有梗結(jié),總覺得用得很忐忑,今天,終于有時間思考和總結(jié)了下,理清了想通了。代碼和注釋如下:

其中GameLogic是我們自己的控制游戲生命周期的管理類,當(dāng)游戲進行中,GameLogic.AddComponent總是成功的添加組件到一個標(biāo)記為DontDestroyOnLoad的對象上,這樣保證單例的生命期。

當(dāng)游戲結(jié)束后,開始數(shù)據(jù)清理時,如果調(diào)用 GameLogic.AddComponent就會返回null,這樣保證在游戲結(jié)束的清理工作中已銷毀置空的單例不會因為誤引用而【死而復(fù)生】

class UICanvasManager : MonoBehaviour{/*** 基于MonoBehaviour的單例規(guī)則,保證單例的唯一性和安全性* 1,不要手動在編輯器中掛給對象,防止掛重* 2,使用如下方式通過GameLogic生成單例,生命周期易控制* 3,不要在AWake或其它任何地方給_instance賦值,保證單例唯一,不變。考慮以下【危險案例】*//*** 【危險案例】* 先通過UICanvasManager.Instance獲取了一個指向?qū)ο驛的單例,進行一些操作后,A中有了一些數(shù)據(jù),* 后面不小心通過AddComponent添加了一個UICanvasManager組件,此時單例指向了對象B* 這時候有一些游戲數(shù)據(jù)在對象A中,有一些數(shù)據(jù)在對象B中,后果是B中有些你以為已經(jīng)初始化了的數(shù)據(jù)卻為空*/protected static UICanvasManager _instance;public static UICanvasManager Instance{get{if(_instance == null){_instance = GameLogic.AddComponent<UICanvasManager>();}return _instance;}//get}//Instance }

?

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的关于MonoBehaviour的单例通用规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。