Unity3D遊戲進行時持續儲存資料
阿新 • • 發佈:2018-11-12
Unity在切換場景的時候會丟失在上一個場景裡的資料,如果需要用到這個資料的時候會很麻煩。今天本菜鳥就是在做VR和PC場景切換的時候碰到的問題。
先解釋一下問題:在專案執行的時候會讓使用者選擇執行環境是VR還是PC端,本菜是在切換場景的時候改變一個公開的布林值來決定是VR還是PC。但是,在切換場景之後這個布林值不會儲存下來,以至於無論選擇VR還是PC都會進入PC端。下面來說一下解決方法。
本菜目前有兩種解決辦法:
第一種辦法是找一個空物體來儲存資料:
首先建一個空物體,公開一個布林值以便於判斷使用者選擇PC還是VR。然後Public了兩個方法用於給Button加事件,這裡用到了一個方法: Object.DontDestroyOnLoad();載入時保證物體不會被銷燬。程式碼如下:public class StartScene : MonoBehaviour { GameObject VR_PC; void Awake() { VR_PC = transform.gameObject; DontDestroyOnLoad(VR_PC); } public bool IsVR_PC; public void VRScene() { IsVR_PC = true; SceneManager.LoadScene("scene"); } public void PCScene() { IsVR_PC= false; SceneManager.LoadScene("scene"); } }
執行如下:
這樣的話我們就把這個空物體給單獨保留了下來,確保切換場景的時候不會被銷燬或是改變腳本里的變數。
最後在切換到的場景裡找到該物體並獲取指令碼,直接使用就行了
public bool IsVR; GameObject VR_PCChioce; private void Start() { VR_PCChioce = GameObject.FindWithTag("VR_PC"); IsVR = VR_PCChioce.GetComponent<StartScene>().IsVR_PC; }
第二種辦法是把資料設定為靜態:
這個比較簡單,把需要用到的資料在寫成靜態,直接在需要的腳本里My.flag呼叫就行了。
public bool IsVR_PC; public void VRScene() { IsVR_PC = true; My.flag = IsVR_PC; SceneManager.LoadScene("scene"); } public void PCScene() { IsVR_PC= false; My.flag = IsVR_PC; SceneManager.LoadScene("scene"); } } public static class My { public static bool flag = false; }