1. 程式人生 > 實用技巧 >解決unity場景切換中資料互動的問題

解決unity場景切換中資料互動的問題

筆者在此舉一個簡單的例子

我們現在已經建立好兩個場景, 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(); } } }

本期是對場景切換中的一些問題進行解決,如有錯誤或者其他更好的方法,歡迎評論!