Unityでシーンを切り替えても変数を保持し続ける方法/Static変数の使い方

newspaper IT

シーンを切り替えた際に、変数を破棄しないで次のシーンへ引き継ぐには、Static変数を用います。

スポンサーリンク

成果物

publicstatic2
シーンがふたつ用意してあり、それぞれ共通のオブジェクトが置いてあります。アタッチしてあるスクリプトも共通です。
publicstatic3
シーンを切り替えた時に、同じスクリプト(=同じクラス)で変数を受け渡し、
publicstatic1
このアイテムの選択状況(色)を前のシーンと同じ状態にしたい、というのが達成目標です。

Static変数の使い方

シーン間で共通で使える変数を作成
Static 変数名;
kg1
現時点ではこのように、シーンを切り替えると選択しているアイテムがリセットされます。
publicstatic4
シーン間で共通の変数を使いまわしたい時は、変数の宣言時にStaticを頭に付けます。
他のクラスからも干渉する変数の場合は、Public Static 変数名;と宣言します。
publicstatic5
仕組みは単純で、クリックした時にクリックしたオブジェクトの名前を変数に代入(OnMouseDownメソッド内で変数 = this.gameObject.name;)し、
publicstatic6
Startメソッド(シーン切り替え時も読まれる)に、アタッチしているオブジェクトと変数の名前が一致したら選択状態、そうでなけれは非選択状態にセットします。
kg3
実行結果です。画面を切り替えても、アイテムの選択状態が保持される(変数に応じて選択され直す)ことが確認できます。
//Unity C#
    //シーン間で受け渡す変数
    static string select;

    //シーン読み込み時
    void Start()
    {
      //変数selectがアタッチしてるオブジェクトと一致
        if(this.gameObject.name == select)
        {
            this.GetComponent().color = Color.white;
        }
      //変数selectがアタッチしてるオブジェクトと不一致
        else
        {
            this.GetComponent().color = new Color(0.8124341f, 1f, 0.5896226f, 1f);
        }
    }

    void OnMouseDown()
    {
        this.GetComponent().color = Color.white;
        other.GetComponent().color = new Color(0.8124341f, 1f, 0.5896226f, 1f);
        select = this.gameObject.name;
    }

完成品はこちら

やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。

コメント