こんにちは!
ねこじょーかー(@nekojoker1234)と申します。
Unityで開発をしていると、シーンをロードする処理は必須ですよね。
そのときに、「パラメーターを渡してロードしたいな」と考えている人も少なくないはず。
しかし、調べてもなかなか方法が出てきません。
Qiitaで探してみると、[Unity] シーン切り替え時にパラメータを渡すという記事が出てきました。
こちらの内容でもできそうですが、少し難易度が高い印象。
もっと簡単にやる方法はないか、と調べてみたところ、いい方法があったので記事にしておきます。
シーン間でパラメータを渡す方法
結論から言うと、直接パラメータを渡すのではなく、「間に一つクラスを挟んであげて、お互いにそのクラスを参照する」という方法を取ります。
では、具体的に見ていきましょう。
1.中継役となるクラスを作成する
public static class SceneParameter {
public static string CrossSceneInformation { get; set; }
}
MonoBehaviour
を継承しないクラスなので、GameObject
にアタッチすることはできませんが、そのまま使うことができます。
GameObject
にアタッチしていないので、シーンが変わっても値が保持されている、という仕組みです。
2.ロード前にパラメータをセットする
今回はSceneB
を読み込む例としました。
using UnityEngine;
UnityEngine.SceneManagement;
public class ScriptA : MonoBehaviour {
void Start()
{
SceneParameter.CrossSceneInformation = "Hello World!";
SceneManager.LoadScene("SceneB");
}
}
3.ロード先でパラメータを取得する
ロード先(SceneB)で、セットしたパラメータを読み込みます。
static
なので、インスタンス化することなく、そのまま参照できます。
using UnityEngine;
public class ScriptB: MonoBehaviour {
void Start () {
Debug.Log(SceneParameter.CrossSceneInformation);
}
}
実行したら、ちゃんと値を渡せていることが確認できます。
Hello World!
UnityEngine.Debug:Log(Object)
ScriptB:Start()
これだけです。
かなりスッキリしましたね!!
すてきなシーンロードライフ(?)を送りましょう!
参考
Load scene with param variable Unity
あわせて読みたい
運営している PlayFab 専用ブログ
https://playfab-master.com