【Unity】現在のシーンを取得する

前回に続いてシーン関連ということで、現在のシーンを取得する方法です。

複数のシーンで同じ処理を行うボタンがあるけれど、シーンによっては特別な処理をはさみたいときなどに使えるんじゃないでしょうか?

LoadLevel()で現在のシーンを再読み込み

またまたおなじみの『Unity5 3D/2Dゲーム開発実践入門』の331ページにシーンのリロードについて記載があります。

    void Reload () {
        // 現在読み込んでいるシーンを再読込み
        Application.LoadLevel(Application.LoadLevel);
    }

以前のバージョンでは()の中のApplication.loadLevelで現在読み込んでいるシーンのインデックスを取得できていたようですが、新しいバージョンではエラーが出て使えなくなっています・・・。

やっぱり時代はSceneManager

ということで、やっぱりSceneManagerを使います。
流れとしてはシーンのインデックスを取得して、それを使ってLoadScene()に突っ込みます。

    void Reload () {
        // 現在読み込んでいるシーンのインデックスを取得
        int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
        // 取得したシーンインデックスで再読込み
        SceneManager.LoadScene(currentSceneIndex);
    }

または、シーンの名前を取得して使うこともできます。

    void Reload () {
        // 現在読み込んでいるシーンの名前を取得
        string currentScene = SceneManager.GetActiveScene().name;
        // 取得したシーン名で再読込み
        SceneManager.LoadScene(currentScene);
    }

LoadSceneの()の中に取得する部分を突っ込んで一行で終わらせちゃってももちろんOKです。

    void Reload () {
        // 現在読み込んでいるシーンを再読込み
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

シーンによって特別な処理をはさむなら

他に使用する場面を考えると、複数のシーンで同じ処理を行うボタンを押したときに、シーンによって特別な処理を行うとしたら、下のような感じでしょうか。

    public void OnButtonClicked () {
        // 現在読み込んでいるシーンの名前を取得
        string currentScene = SceneManager.GetActiveScene().name;
        // 現在のシーンが"SpecialScene"なら特別な処理を行って共通処理を行う
        if (currentScene == "SpecialScene") {
            // 特別な処理
        }

        // 共通処理
    }

古い本だとシーン関連の処理でエラーが出たりすると思いますが、SceneManagerを使うことで置き換えることができますので、Google先生などを利用して解決しましょう!

シーンのインデックスの場所

あ、そうだ。
シーンのインデックスを取得していますが、シーンのインデックスは・・・
シーンのインデックス
[File] > [Build Settings…] で確認できます。

ではまた!

sponsored link

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です