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