ねのぷろ! ~げーむ・ぷろぐらみんぐ・ぶろぐ〜

プログラミングやゲームについてだらだら書きます。https://twitter.com/nenowawon

Unity マルチシーン シーンを動的に読み込む

こんにちは。ネノワヲンです。今回は

nenowawon.hatenablog.com

の続きになります。

初めに

実行形式では、初めから複数のシーンを読み込んでおくことができません。

そのため、ゲームが起動してから必要なシーンを読み込む必要があります。

動的にシーンを追加する

SceneManagerのLoadSceneは、シーンの読み込み方法を選択することができます。

// そのシーンだけ読み込む(いつもの)
SceneManager.LoadScene(sceneIndex);
// ↑と同じ
SceneManager.LoadScene(sceneName, LoadSceneMode.Single);

// LoadSceneModeをAdditiveにするとシーン追加になる
SceneManager.LoadScene(sceneName, LoadSceneMode.Additive);

活用例

実際に私が使った手法です。

f:id:nenowawon:20190623145523p:plain
シーン名を登録しておく

メインとなるシーンに、↑のようにシーン名を登録しておきます。

Startで、登録しておいたシーンを追加で読み込みます。

private async void Start()
    {
        // サブシーンを読み込む
        foreach (var sceneName in subSceneNames)
        {
            await SceneController.AddSceneAsync(sceneName);
        }

        // ステージを読み込む
        await SceneController.AddSceneAsync(GameParameterManager.Instance.StageSceneName);

        // ステージのマップを読み込む
        await SceneController.AddSceneAsync(StageSceneManager.Instance.StageMapSceneName);

        // シーン読み込み完了イベントを発行
        OnLoadSceneCompleted.OnNext(Unit.Default);

        OnLoadSceneCompleted.Dispose();
    }

SceneControllerは自作クラスです。詳しくは

nenowawon.hatenablog.com

をご覧ください。やっていることは動的にシーンを追加しているだけです。

今回は、ゲームに必要なUI、ステージマップ、ステージの敵を組み合わせています。

このようにすることで、違うステージを使いたいときには読み込むシーンを変えることで対応できます。

f:id:nenowawon:20190623150630p:plain
必要に応じて差し替えたり追加できる