-->

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);
}
}
}
}