Unity staticクラスを使ってシーン間でデータを受け渡す

staticクラスを用いてシーン間でデータを受け渡す方法について紹介します。

今回は、SceneAからSceneBに遷移することを考えます。
まずは受け渡したいデータを含むstaticクラスを作成しましょう。

CommonData.cs

public static class CommonData
{
    public static int hoge = 1;
}

続いてシーンAでこの変数を書き換え、その後シーン遷移を行います。
今回はhogeを2に変更します。

SceneA.cs

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneA : MonoBehaviour
{
    private void Start()
    {
        CommonData.hoge = 2;
        SceneManager.LoadScene("SceneB");
    }
}

シーンBでデータにアクセスし値を確認します。

SceneB.cs

using UnityEngine;

public class SceneB : MonoBehaviour
{
    private void Start()
    {
        Debug.Log(CommonData.hoge);
    }
}

各シーンの構成はこのようになっています。

SceneAを実行すると正しくデータを受け渡せていることが確認できました。

問題点

staticクラスを使ったデータの受け渡しは簡単ですが、以下のような問題点もあります。

どこからでもアクセスできる
どのクラスからでもアクセスができるので、乱用されたり意図せず変更されてしまいバグに繋がる可能性があります。
例えば今回の例ではSceneBでもhogeの値を書き換えることができてしまいます。

初期化を忘れがち
staticクラスはゲーム終了まで常にデータが保たれるので、再びSceneAに戻った際に初期化をしないと前回SceneBに渡したデータが残ったままになり、バグや混乱の元になりやすいです。

これらの問題は初心者の頃はある程度気にしなくても良いですが、徐々に意外と大事なことが分かってくるかと思います...