Files
test/Assets/Editor/SceneLoaderEditor.cs
T
vuong dinh hoang 6275683c71 add gfx
2026-05-28 14:09:20 +07:00

92 lines
3.0 KiB
C#

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using System.Collections.Generic;
using System.IO;
using System.Linq;
static class QuickSceneWindowHelper
{
const float WindowWidth = 250f;
const float WindowHeight = 300f;
public static void ShowCentered<T>(string title) where T : EditorWindow
{
var window = EditorWindow.GetWindow<T>(title);
var mainWindow = EditorGUIUtility.GetMainWindowPosition();
window.position = new Rect(
(mainWindow.width - WindowWidth) / 2,
(mainWindow.height - WindowHeight) / 2,
WindowWidth,
WindowHeight);
window.Show();
}
public static IEnumerable<EditorBuildSettingsScene> GetAvailableScenes()
{
string currentScenePath = EditorSceneManager.GetActiveScene().path;
return EditorBuildSettings.scenes.Where(scene =>
!string.Equals(scene.path, currentScenePath, System.StringComparison.OrdinalIgnoreCase));
}
public static string GetSceneDisplayName(EditorBuildSettingsScene scene)
{
string sceneName = Path.GetFileNameWithoutExtension(scene.path);
return scene.enabled ? sceneName : $"{sceneName} (not in build)";
}
public static void DrawSceneList(OpenSceneMode mode)
{
EditorGUILayout.LabelField("Available Scenes:", EditorStyles.boldLabel);
EditorGUILayout.Space();
var scenes = EditorBuildSettings.scenes;
if (scenes.Length == 0)
{
EditorGUILayout.HelpBox("No Scenes in Build Settings", MessageType.Warning);
return;
}
var availableScenes = GetAvailableScenes().ToList();
if (availableScenes.Count == 0)
{
EditorGUILayout.HelpBox("No other scenes available", MessageType.Info);
return;
}
foreach (var scene in availableScenes)
{
if (GUILayout.Button(GetSceneDisplayName(scene), GUILayout.Height(30)))
{
OpenScene(scene.path, mode);
}
}
}
public static void OpenScene(string path, OpenSceneMode mode)
{
if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
return;
EditorSceneManager.OpenScene(path, mode);
Debug.Log($"Opened scene ({mode}): {path}");
EditorWindow.focusedWindow?.Close();
}
}
public class QuickSceneWindow : EditorWindow
{
[MenuItem("GameObject/Quick Open Adaptive Scene", false, 1)]
public static void ShowWindow() => QuickSceneWindowHelper.ShowCentered<QuickSceneWindow>("Quick Scene");
void OnGUI() => QuickSceneWindowHelper.DrawSceneList(OpenSceneMode.Additive);
}
public class QuickSingleSceneWindow : EditorWindow
{
[MenuItem("GameObject/Quick Open Single Scene", false, 2)]
public static void ShowWindow() => QuickSceneWindowHelper.ShowCentered<QuickSingleSceneWindow>("Quick Single Scene");
void OnGUI() => QuickSceneWindowHelper.DrawSceneList(OpenSceneMode.Single);
}