有時(shí)候我們想要保存一個(gè)全局的游戲腳本,比如封裝的SDK需要用腳本來做中間件的支持,并且場(chǎng)景切換后仍要留存。
那么游戲?qū)ο笄袚Q場(chǎng)景如何不釋放?答:使用DontDestroyOnLoad(GameObject gameObject)方法。
使用該方法會(huì)有一個(gè)問題,比如我們?cè)贏場(chǎng)景里DontDestroyOnLoad(gameObjectA),則我們切換到B場(chǎng)景時(shí)GameObjectA不會(huì)被釋放掉,然后我們?cè)偾袚Q回場(chǎng)景A,會(huì)發(fā)現(xiàn)出現(xiàn)了兩個(gè)gameObjectA
解決方案1
創(chuàng)建一個(gè)初始化場(chǎng)景,在創(chuàng)建的某個(gè)游戲?qū)ο蟮娜帜_本中,Start方法里DontDestroyOnLoad(this),
void Start(){
????DontDestroyOnLoad(this)
}
然后進(jìn)入自己的第一個(gè)游戲場(chǎng)景,且不再返回初始化場(chǎng)景,也就不會(huì)出現(xiàn)來回切場(chǎng)景DontDestroyOnLoad沒有刪除的問題
解決方案2
利用靜態(tài)構(gòu)造函數(shù)只會(huì)執(zhí)行一次的特性來執(zhí)行DontDestroyOnLoad方法
using UnityEngine;
using System.Collections;
public class Global :MonoBehaviour
{
public static Global instance;
static Global()
{
GameObject go = new GameObject("Globa");
DontDestroyOnLoad(go);
instance = go.AddComponent<Global>();
}
public void DoSomeThings()
{
Debug.Log("DoSomeThings");
}
void Start ()
{
Debug.Log("Start");
}
}