DontDestroyOnLoad的使用

1.DontDestroyOnLoad可以保證Gameobject以及上面綁定的組件不會銷燬,在處理全局控制的時候有用。

public class ExampleClass :[MonoBehaviour](http://www.jianshu.com/MonoBehaviour.html){
void Awake() {
DontDestroyOnLoad(transform.gameObject);
}}

2.使用DontDestroyOnLoad的時候需要注意的坑:

由於使用DontDestroyOnLoad的物體不會被釋放掉,假設我們寫了上面的代碼,而物體所在的遊戲場景又可以重複進入的時候,遊戲物體就會在每次進入場景的時候創建一次,甚至可以無限創建下去,這樣的處理明顯不妥。

3.針對性的解決方案:

方案1:在每次調用DontDestroyOnLoad的時候,都去判斷場景中是否有對應的物體,如果沒有再去創建

public class ExampleClass :[MonoBehaviour](http://www.jianshu.com/MonoBehaviour.html){
void Awake() {
If(Gameobject.Find("GlobalController"))
 DontDestroyOnLoad(transform.gameObject);
}}

方案2:把DontDestroyOnLoad的調用寫到最初始的場景,並且保證相應的場景中不存在再次進入的可能性

方案3:把使用DontDestroyOnLoad的腳本進行靜態初始化,在靜態初始化的時候進行DontDestroyOnLoad操作

public class Global:MonoBehaviour
{
public static Globalinstance;
static Global()
{
GameObjectgo=newGameObject("Globa");
DontDestroyOnLoad(go);
instance=go.AddComponent();
}

public voidDoSomeThings()
{
Debug.Log("DoSomeThings");
}

voidStart()
{
Debug.Log("Start");
}
}

調用方便,也封裝方便,同樣的方法可以使用在單例等的構建上。

作者:霸俊流年
鏈接:https://www.jianshu.com/p/57b339a79959
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章