hildsoftのコード置き場

プログラム関連で調べたことやコードの保管場所です

Unityで複数のシーンを重複しないようにロードする

スポンサーリンク

f:id:hildsoft:20181117155719j:plain

検証環境

Unity 2018.2.13f1

やりたい事

f:id:hildsoft:20181117161720j:plain

  • エディタで既にロードしているシーンを追加でロードしないようにする。
  • エディタでロードしていないけど、実行に必要なシーンを自動でロードする。

これを同時に行うスクリプトです。

問題点

エディタで追加のシーンをロードするのは簡単ですが、開き忘れた場合はエラーになるなど、開発時に他のシーンを開くときなど、必要なシーンを追加するのに面倒な場合があります。

必ず開くとエディタで開いているものと重複して開くことになるため、既に開いているかどうかをチェックしてロードします。

使用ケース

f:id:hildsoft:20181117161758j:plain

今回はゲーム内のシーンと、共通のUIをシーンで分けて二つを分けるつもりで作りました。
別のシーンからロードされるときは、固定で必要なシーンをロードするのですが、開発中はUIは呼び忘れても自動でロードしたいのです。

ロードタイミングなどで問題が出る可能性もありますので、実際にリリースで使用する場合は、同期や待機処理が必要になるかもしれません。

サンプルコード

LoadUIScene.cs

using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadUIScene : MonoBehaviour
{
    public string loadSceneName;

    void Awake ()
    {
        LoadScene(this.loadSceneName);
    }

    private void LoadScene(string loadSceneName)
    {
        for (int i = 0; i < SceneManager.sceneCount; i++)
        {
            Scene scene = SceneManager.GetSceneAt(i);

            if (scene.name == loadSceneName)
            {
                return;
            }
        }

        SceneManager.LoadScene(loadSceneName, LoadSceneMode.Additive);
    }
}