LoginSignup
2
5

More than 3 years have passed since last update.

【Unity】シーンをロードするとき、スマートにパラメーターを渡す方法

Last updated at Posted at 2019-12-15

こんにちは!
ねこじょーかー(@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);
    }
}

実行したら、ちゃんと値を渡せていることが確認できます。

Console
Hello World!
UnityEngine.Debug:Log(Object)
ScriptB:Start() 

これだけです。
かなりスッキリしましたね!!

すてきなシーンロードライフ(?)を送りましょう!

参考

Load scene with param variable Unity

あわせて読みたい

運営している PlayFab 専用ブログ
https://playfab-master.com

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5