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
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。