免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Unity3D研究院之DontDestroyOnLoad的坑

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

舉個(gè)例子:

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

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

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

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

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

我目前的做法是,我做了一個(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)景,也就是說我的邏輯永遠(yuǎn)不會(huì)在回返我的初始化場(chǎng)景。所以我也不會(huì)出現(xiàn)來回切場(chǎng)景DontDestroyOnLoad沒有刪除的問題。

還有一個(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)景而被銷毀。而且用起來非常方便。在需要調(diào)用它的地方直接調(diào)用就行了。

1
Global.instance.DoSomeThings();
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Unity3D游戲開發(fā)之“DontDestroyOnLoad”重復(fù)實(shí)例化的問題
[Unity3D]預(yù)設(shè)Prefab與實(shí)例Instantiate的基本使用
Unity C# 打包AssetBundle與場(chǎng)景
Unity官方實(shí)例教程 Roll
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服