うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】UnityEditor での再生時 Scene を固定する

Unity 2017.1 から追加された EditorSceneManager.playModeStartScene を利用することで
UnityEditor で Play を押した際に別シーンだったとしても、指定したシーンから再生することが可能になる

Unity - Scripting API: SceneManagement.EditorSceneManager.playModeStartScene

使い方

SceneAsset をロードしてきてそれを渡してやれば、再生できるようになります
また、null を入れることで指定を解除することができます

var startScene = AssetDatabase.LoadAssetAtPath<SceneAsset>(path);
EditorSceneManager.playModeStartScene = startScene;

サンプル

f:id:hacchi_man:20200327005245p:plain

using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
 
public class PlaySceneEditorWindow : EditorWindow
{
    [MenuItem("Tools/SetStartScene")]
    private static void ShowWindow()
    {
        var window = GetWindow<PlaySceneEditorWindow>();
        window.titleContent = new GUIContent("Start Scene");
        window.Show();
    }
    
    private SceneAsset _startScene;
    
    private void OnEnable()
    {
        _startScene = EditorSceneManager.playModeStartScene;
    }
 
    private void OnGUI()
    {
        using (var check = new EditorGUI.ChangeCheckScope())
        {
            _startScene = (SceneAsset) EditorGUILayout.ObjectField("StartSecen", _startScene, typeof(SceneAsset));
            if (check.changed)
            {
                EditorSceneManager.playModeStartScene = _startScene;
            }
        }
 
        // Start Scene を削除
        using (new EditorGUI.DisabledScope(_startScene == null))
        {
            if (GUILayout.Button("Reset Start Scene"))
            {
                EditorSceneManager.playModeStartScene = null;
            }
        }
    }
}