プレイモード時に最初に開くシーンを指定する

Unity上でゲームを作っていると、タイトル画面とゲーム画面などでシーンを分けることがあります。

開発が進んでくるとゲーム全体の初期化の都合でタイトル画面用シーンから起動しないといけなくなってくるケースがあります。

その場合、ゲーム画面用シーンを編集した後いちいちタイトル画面用シーンを開き直して実行する手間が生じます。

そんなときに役に立つのが、EditorSceneManager.playModeStartSceneです。

シーンを設定するためのスクリプトを用意する

そのままでは使えないので、EditorSceneManager.playModeStartSceneにシーンアセットを設定するためのスクリプトを作成します。

Editorフォルダを作って以下のスクリプトを配置します。

using UnityEditor;
using UnityEditor.SceneManagement;

public static class PlayModeStartSceneMenu
{
    private const string SetMenuPath = "Assets/PlayModeStartScene/Set";
    private const string ClearMenuPath = "Assets/PlayModeStartScene/Clear";
    
    /// <summary>
    /// スタートシーンを設定する
    /// </summary>
    [MenuItem(SetMenuPath, priority = 0)]
    public static void SetPlayModeStartScene()
    {
        EditorSceneManager.playModeStartScene = Selection.activeObject as SceneAsset;
    }
    
    [MenuItem(SetMenuPath, true)]
    public static bool PlayModeStartSceneValidate()
    {
        // シーンが設定されていたらチェックを入れる
        Menu.SetChecked(SetMenuPath, EditorSceneManager.playModeStartScene != null);
        
        // シーンアセットを選択している場合、選択中のシーンを設定可能にする
        return Selection.count == 1 && Selection.activeObject is SceneAsset;
    }
    
    /// <summary>
    /// スタートシーンをクリアする
    /// </summary>
    [MenuItem(ClearMenuPath, priority = 1)]
    public static void ClearPlayModeStartScene()
    {
        EditorSceneManager.playModeStartScene = null;
    }
}

スクリプトを追加した後、

ProjectView上でシーンアセットを選択した状態で右クリックメニューを開くと以下のメニューが追加されています。

Setを選択すると、EditorSceneManager.playModeStartSceneにシーンが設定されます。

この状態で実行すると指定したシーンから実行されるようになります。

GameSceneを開いている状態でプレイモードに入ると、TitleSceneから始まり、

終了するとGameSceneに戻っているのが確認できると思います。

まとめ

プレイモードに入る際に開かれるシーンを指定する方法を解説しました。

Unityで開発を進める上で、特定のシーンから起動する必要がある場合に、毎回手動でシーンを切り替える手間を省くためにEditorSceneManager.playModeStartSceneを利用することができます。

一つ気をつける点は、UnityEditorを終了するとEditorSceneManager.playModeStartScene に登録したシーンは解除される点です。

自分でスクリプトが書けるなら、登録したシーンを再現できるようにするとか、

Build SettingsScenes In Buildの先頭のシーンが自動で設定されるようにするのもいいかもしれません。