【Unity】シーン遷移でスクリプトの変数を引き渡す最も簡単な方法。変数をStatic化するのが一番簡単です。

2023年1月31日

どうも、だらはです。
今回は、シーンを切り替えたときにスクリプトの変数を引き渡す方法を紹介します。

スポンサーリンク

ポイントはStatic変数化すること

結論から言うと、引き渡したい変数をStatic化するのがポイントです。
具体的には以下の手順となります。

◆手順

  1. 引き渡したい変数をStatic化する。
  2. スクリプト名.変数名にて変数にアクセスする。

以上です。
以下にサンプルスクリプトを記述します。
今回は、メソッドを引き渡す例も記載してみました。
Build Settingsに2つのシーンを登録してお試しください。

◆遷移元シーンのオブジェクトにアタッチするスクリプト

using UnityEngine;
using UnityEngine.SceneManagement;

public class StartButton : MonoBehaviour
{
    public static float gainX = 1f;
    public static float getGainX()
    {
        return gainX;
    }

    [SerializeField]
    private string SampleScene;

    private string text = "ボタンを押してね。Scpaceキーでも良いです";
    private void OnGUI()
    {
        Rect rect1 = new Rect(10, 10, 400, 30);
        GUI.Label(rect1, text);

        rect1.y = 40;
        rect1.height = 50;
        if (GUI.Button(rect1, "Push Start")
            || (Input.GetKey(KeyCode.Space)))
        {
            SceneManager.LoadScene(SampleScene);
        }
    }
}

◆遷移先シーンのオブジェクトにアタッチするスクリプト

using UnityEngine;

public class ValOut : MonoBehaviour
{
    void Start()
    {
        Debug.Log(StartButton.gainX);
        StartButton.gainX = 2f;
        Debug.Log(StartButton.gainX);
        StartButton.gainX = 3f;
        Debug.Log(StartButton.getGainX());
    }
}

◆実行結果

最後に

いかがでしたでしょうか。
今回は変数をStatic化するという手法を紹介しました。
ただし、Static変数はどこからでも値にアクセスができるようになるため注意が必要です。(バグの原因となる)
使用には十分に注意して使用してください。

以上、だらはでした。

スポンサーリンク

基礎

Posted by daraha_gm