如何使游戲?qū)ο笄袚Q場(chǎng)景后不釋放?DontDestroyOnLoad

有時(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");

}

}

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

友情鏈接更多精彩內(nèi)容