UnityでSceneを跨いでデータを保持する方法

ScriptableObjectを使用してシーン間でデータを保持する方法を紹介します。

ソースコード

データの保持に使用するScriptableObject

下記スクリプトをプロジェクトに追加します。

アセットにScriptableObjectを作成します。

ProjectWindowで右クリック→[ Create ]→[ Click Count Scriptable Object ]

ClickCountScriptableObject
using System;
using UnityEngine;

[CreateAssetMenu]
public class ClickCountScriptableObject : ScriptableObject
{
    [NonSerialized] public int ClickCount;
}

データを渡す側のサンプル

ゲームオブジェクトに下記スクリプトをアタッチし、インスペクターからScriptableObjectを設定します。

引き受け側のシーン名は”ResultScene”としています。

ClickCounter.cs
using UnityEngine;
using UnityEngine.SceneManagement;

public class ClickCounter : MonoBehaviour
{
    [SerializeField] private ClickCountScriptableObject clickCountScriptableObject;

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            clickCountScriptableObject.ClickCount++;
            Debug.Log(clickCountScriptableObject.ClickCount);
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            SceneManager.LoadScene("ResultScene");
        }
    }
}

データを受け取るサンプル

“ResultScene”を作成します。

シーンにUI/TMP_Textを配置します。

ゲームオブジェクトに下記スクリプトをアタッチし、インスペクターからTMP_TextとScriptableObjectを設定します。

ClickCountPresenter.cs
using UnityEngine;
using TMPro;

public class ClickCountPresenter : MonoBehaviour
{
    [SerializeField] private TMP_Text text;
    [SerializeField] private ClickCountScriptableObject clickCountScriptableObject;
    
    void Start()
    {
        text.text = clickCountScriptableObject.ClickCount.ToString();
    }
}

実行

ボタンをクリックするとコンソールに値が表示されます。

スペースを押すとResultScaneに移行し、クリックした回数が画面に表示されます。

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です