解決unity場景切換中資料互動的問題
阿新 • • 發佈:2020-10-26
筆者在此舉一個簡單的例子
我們現在已經建立好兩個場景, start, game, 現在要在這兩個場景中進行資料互動
unity提供了一個方法將我們想要互動的資料以一個場景儲存下來,DontDestroyOnLoad();, 該方法將對掛載的物體DontDestroyOnLoad場景中,該場景不會隨著start和game的切換而切換,所以,在切換場景後,我們需要的資料可以在DontDestroyOnLoad場景的物體中獲取
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;using UnityEngine.UI; public class Data : MonoBehaviour{ /// <summary> /// 單例模式 /// </summary> public static Data m_Data; private void Awake() { m_Data = this; DontDestroyOnLoad(this); } }
此時便可以在想要的場景中獲取到需要的資料和資源,然後再切換場景的時候,將這些資料和資源進行整合,這裡的單例模式也是方便獲取資料的一種方法。
掛載Data這個指令碼的物體要做成預製體,否則直接存在場景中,在每一次載入該場景時,就會生成一個該物體,會造成資料積壓,還會有不必要的bug產生,所以,我們在開始遊戲的時候,再建立一個物體,該物體搭載的指令碼將判斷場景中是否有搭載Data指令碼的物體,如果沒有,則載入,有,則不需要建立該物體。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Global : MonoBehaviour { public GameObject data;private void Awake() { if (GameObject.FindGameObjectWithTag("Data") == null) { Instantiate(data); }else { GameObject.FindGameObjectWithTag("Data").GetComponent<Data>().Init(); } } }
本期是對場景切換中的一些問題進行解決,如有錯誤或者其他更好的方法,歡迎評論!