国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Unity3D之DontDestroyOnLoad的坑

2019-11-06 06:02:25
字體:
來源:轉載
供稿:網友

Unity中的一個方法DontDestroyOnLoad可以讓某些游戲對象在切換場景的時候不是施放,聽起來是一個非常好的方法,但是其實如果沒用好那么可能就是有問題了。

舉個例子:

在場景1中某一個腳本的Start方法中,DontDestroyOnLoad(A)

接著切換到場景2中,理所當然A對象被保留了下來

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

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

我目前的做法是,我做了一個初始化場景。在初始化場景里面我只做兩件事,第一在初始化場景里面的某個游戲對象的全局腳本中,Start方法里我把這個場景里面的所有游戲對象全部設置成DontDestroyOnLoad,也就是切換場景時不銷毀,比如NGUI的Root梳妝結構。

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

第二,接著我在進入我的第一個游戲場景,也就是說我的邏輯永遠不會在回返我的初始化場景。所以我也不會出現來回切場景DontDestroyOnLoad沒有刪除的問題。

還有一個巧妙的辦法就是利用static 初始化方法,如下代碼所示,當代碼在調用Global類的時候

首先程序會進入static Global方法中,這個方法永遠只會走一遍,所以我在這里創建一個GameObjcet,然后把Global這條腳本綁定上去,我在DontDestroyOnLoad這個對象。

using UnityEngine;using System.Collections;public class Global :MonoBehaviour{ public static Global instance; static Global() { GameObject go = new GameObject("Global"); DontDestroyOnLoad(go); instance = go.AddComponent<Global>(); } public void DoSomeThings() { Debug.Log("DoSomeThings"); } void Start () { Debug.Log("Start"); }}

這樣這條腳本就類似一個靜態腳本了,而且這個游戲對象也永遠不會因為切換場景而被銷毀。而且用起來非常方便。在需要調用它的地方直接調用就行了。

Global.instance.DoSomeThings();

本文轉自:http://www.xuanyusong.com/archives/2938


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平遥县| 若羌县| 白沙| 望谟县| 大邑县| 康定县| 平果县| 曲松县| 东山县| 富民县| 黄陵县| 壤塘县| 邛崃市| 万载县| 武城县| 绍兴县| 五家渠市| 永平县| 德保县| 辽源市| 聂拉木县| 梧州市| 个旧市| 鄂伦春自治旗| 灌阳县| 夹江县| 涪陵区| 英德市| 连江县| 石门县| 临汾市| 邹平县| 沈丘县| 临澧县| 平乡县| 驻马店市| 元朗区| 阳谷县| 衡阳市| 施甸县| 太保市|