日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Unity3D研究院之DontDestroyOnLoad的坑

 kiki的號(hào) 2017-05-31

Unity中的一個(gè)方法DontDestroyOnLoad可以讓某些游戲?qū)ο笤谇袚Q場(chǎng)景的時(shí)候不是施放,聽(tīng)起來(lái)是一個(gè)非常好的方法,但是其實(shí)如果沒(méi)用好那么可能就是有問(wèn)題了。

舉個(gè)例子:

地址:http://www./archives/2938

在場(chǎng)景1中某一個(gè)腳本的Start方法中,DontDestroyOnLoad(A)

接著切換到場(chǎng)景2中,理所當(dāng)然A對(duì)象被保留了下來(lái)

如果在從2場(chǎng)景再次回到1場(chǎng)景,那么又執(zhí)行了一遍DontDestroyOnLoad(A)然而之前你的A對(duì)象卻沒(méi)有被施放,這樣就會(huì)無(wú)線循環(huán)下去了。

當(dāng)然我們可以去做邏輯判斷是否DontDestroyOnLoad,判斷A是否等于Null做一些判斷。但是我覺(jué)得這其實(shí)是下策。DontDestroyOnLoad方法其實(shí)更多的是去保存一個(gè)全局的游戲腳本,比如一些第三方的SDK你需要用這個(gè)腳本來(lái)做中間件的支持。

我目前的做法是,我做了一個(gè)初始化場(chǎng)景。在初始化場(chǎng)景里面我只做兩件事,第一在初始化場(chǎng)景里面的某個(gè)游戲?qū)ο蟮娜帜_本中,Start方法里我把這個(gè)場(chǎng)景里面的所有游戲?qū)ο笕吭O(shè)置成DontDestroyOnLoad,也就是切換場(chǎng)景時(shí)不銷毀,比如NGUI的Root梳妝結(jié)構(gòu)。

1
2
3
4
Object[] initsObjects = GameObject.FindObjectsOfType(typeof(GameObject));
foreach (Object go in initsObjects) {
DontDestroyOnLoad(go);
}

第二,接著我在進(jìn)入我的第一個(gè)游戲場(chǎng)景,也就是說(shuō)我的邏輯永遠(yuǎn)不會(huì)在回返我的初始化場(chǎng)景。所以我也不會(huì)出現(xiàn)來(lái)回切場(chǎng)景DontDestroyOnLoad沒(méi)有刪除的問(wèn)題。

還有一個(gè)巧妙的辦法就是利用static 初始化方法,如下代碼所示,當(dāng)代碼在調(diào)用Global類的時(shí)候

首先程序會(huì)進(jìn)入static Global方法中,這個(gè)方法永遠(yuǎn)只會(huì)走一遍,所以我在這里創(chuàng)建一個(gè)GameObjcet,然后把Global這條腳本綁定上去,我在DontDestroyOnLoad這個(gè)對(duì)象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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");
}
}

這樣這條腳本就類似一個(gè)靜態(tài)腳本了,而且這個(gè)游戲?qū)ο笠灿肋h(yuǎn)不會(huì)因?yàn)榍袚Q場(chǎng)景而被銷毀。而且用起來(lái)非常方便。在需要調(diào)用它的地方直接調(diào)用就行了。

1
Global.instance.DoSomeThings();

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多