【Unity】上部メニューから一時的に別シーンに遷移してプレイモードに入る

背景

別のシーンでUIを作っている時に、タイトル画面からテストプレイをする際、毎回タイトルのシーンを開いてプレイモードに入るのが面倒くさい。

実装内容

上部メニューにTestメニューを作成し、押下するとTitleシーンを開く設定でPlayモードに入るようにする。

コード

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;

public class QuickStart : MonoBehaviour
{
    private static string ScenePath = "Assets/Scenes/Title.unity";
    
    [MenuItem("Test/テストプレイ開始")]
    private static void LoadTitleScene()
    {
        SceneAsset scene = AssetDatabase.LoadAssetAtPath<SceneAsset>(ScenePath);
        
        EditorSceneManager.playModeStartScene = scene;
        EditorApplication.isPlaying = true;

        EditorApplication.playModeStateChanged += StateChangeEvent;
    }

    /// <summary>
    /// Editorのプレイモードステートが変更した時に呼ばれる処理
    /// </summary>
    /// <param name="playModeStateChange"></param>
    private static void StateChangeEvent(PlayModeStateChange playModeStateChange)
    {
        if (playModeStateChange == PlayModeStateChange.ExitingPlayMode)
        {
            EditorSceneManager.playModeStartScene = null;
        }
    }
}

リストの中身をシャッフルする。(C#)

public static List<T> GetShuffledList<T>(this List<T> list)
{
    return list.OrderBy(_ => Guid.NewGuid()).ToList();
}


NewGuid()でランダムなGUIDを作成して、それをOrderByすることで、Listの中身をランダムに再配置する。
docs.microsoft.com

カードゲームでバトル開始時にデッキの中身をシャッフルする必要があったため、Listの拡張メソッドとして実装。