1. 程式人生 > >Unity3D遊戲進行時持續儲存資料

Unity3D遊戲進行時持續儲存資料

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;
}