-100p

-10p

+10p

+100p

Unityでシーンショートカット

Unityで全てのシーンへ即時ジャンプできるEdiror機能の追加。

プロジェクトが大きくなってくると操作するファイルが増えて、各シーンへの移動が大変面倒になる。
なので各シーンへ即時ジャンプできるEditor機能を作った。

シーンショートカット機能の全文

下のコードを適当な.csファイルに丸コピして、Editorフォルダの下に置く。
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using System.Linq;
using System.IO;
using System.Collections.Generic;

/// <summary>

/// Projectに含まれる全てのシーンへ即時移動するためのEditor機能

/// </summary>

public class EditorSceneShortcut : EditorWindow
{
    private List<string> mainSceneList = new List<string>();
    private List<string> otherSceneList = new List<string>();

    private Vector2 scrollPosition;

    private bool isInitialized;

    [MenuItem("Scenes/Window")]
    private static void Init()
    {
        EditorSceneShortcut window = (EditorSceneShortcut)GetWindow(typeof(EditorSceneShortcut));
        window.ShowUtility();
    }

    void OnGUI()
    {
        
//EditorWindowを開いた直後にシーンのpathを取得

        if(!isInitialized)
        {
            ReloadScenePath();
            isInitialized = true;
        }

        ReloadScenePathButton();
        EditorGUILayout.Space(20);

        scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);

        LoadMainSceneButton();
        EditorGUILayout.Space(20);
        LoadOtherSceneButton();

        EditorGUILayout.EndScrollView();
    }

    
/// <summary>

    
/// 全てのシーンのpathを取得

    
/// </summary>

    private void ReloadScenePath()
    {
        mainSceneList.Clear();
        otherSceneList.Clear();

        
//BuildSettingsに登録されているシーンへのpathをmainSceneListに保存

        mainSceneList = EditorBuildSettings.scenes.Select(x => x.path).ToList();

        
//Projectに存在する全てのシーンファイルを取得

        foreach (var guid in AssetDatabase.FindAssets("t:Scene"))
        {
            
//guidからpathに変換

            var path = AssetDatabase.GUIDToAssetPath(guid);
            
//BuildSettingsに含まれていないならotherSceneListに保存

            if (!mainSceneList.Contains(path))
            {
                otherSceneList.Add(path);
            }
        }
    }

    
/// <summary>

    
/// ReloadボタンのUI表示

    
/// </summary>

    private void ReloadScenePathButton()
    {
        if (GUILayout.Button("リロード"))
        {
            ReloadScenePath();
        }
    }

    
/// <summary>

    
/// BuildSettingsに含まれるシーンへのボタンを配置

    
/// </summary>

    private void LoadMainSceneButton()
    {
        GUILayout.Label("BuildSettingsに含まれるシーン");
        foreach (var item in mainSceneList)
        {
            if(GUILayout.Button(Path.GetFileName(item)))
            {
                EditorSceneManager.OpenScene(item);
            }
        }
    }

    
/// <summary>

    
/// BuildSettingsに含まれないシーンへのボタンを配置

    
/// </summary>

    private void LoadOtherSceneButton()
    {
        GUILayout.Label("BuildSettingsに含まれないシーン");
        foreach (var item in otherSceneList)
        {
            if (GUILayout.Button(Path.GetFileName(item)))
            {
                EditorSceneManager.OpenScene(item);
            }
        }
    }
}

使い方はUnity上部メニューのScenes/WindowからEditorWindowを開く。
適当にProjectタブの横あたりにひっつけておくと便利。

0
0

-100p

-10p

+10p

+100p