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に移行し、クリックした回数が画面に表示されます。