Hier mal ein kleines Script, dass das ewig-nervige Rumgeklicke durch die Projektordner zu den Szenen ein wenig abkürzen soll. Zumindest mich nervt sowas ziemlich
Es lohnt sich vorallem, wenn man Unity schön über 2 Monitore fahren kann und Platz für ein paar extra Fenster hat.
Ihr könnt einfach "ScenesFolder" anpassen und dort den Pfad zu euren Szenen angeben. Der Ordner sollte NUR Szenen beinhalten (macht Sinn bei einem Ordner für Szenen )
Unter "Window" findet ihr dann einen Menüpunkt namens "ShowScenes" - hiermit öffnet ihr das Fenster.
Natürlich gehört das Script in einen Editor-Ordner. Wie immer ist das ein Snippet und lässt sich locker verbessern, erweitern etc pp.
Sieht so aus:
Script:
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
public struct SceneInfo
{
public string SceneName;
public string ScenePath;
}
public class SceneListWindow : EditorWindow
{
[MenuItem("Window/ShowScenes")]
public static void Init()
{
// Get existing open window or if none, make a new one:
SceneListWindow window = (SceneListWindow)GetWindow(typeof(SceneListWindow));
SearchForScenes();
}
private Vector2 _scrollPosition;
private static readonly string RootFolder = "Assets";
private static readonly List<SceneInfo> Scenes = new List<SceneInfo>();
private void OnGUI()
{
if (GUILayout.Button("reload"))
{
SearchForScenes();
}
GUILayout.Space(10);
_scrollPosition = GUILayout.BeginScrollView(_scrollPosition, GUILayout.Height(position.height - 40));
foreach (var scene in Scenes.Where(scene => GUILayout.Button(scene.SceneName)))
{
EditorApplication.OpenScene(scene.ScenePath);
}
GUILayout.EndScrollView();
}
public static void SearchForScenes()
{
Scenes.Clear();
ProcessDirectory(RootFolder);
}
public static void ProcessDirectory(string targetDirectory)
{
// Process the list of files found in the directory.
string[] fileEntries = Directory.GetFiles(targetDirectory);
foreach (string fileName in fileEntries)
ProcessFile(fileName);
// Recurse into subdirectories of this directory.
string[] subdirectoryEntries = Directory.GetDirectories(targetDirectory);
foreach (string subdirectory in subdirectoryEntries)
ProcessDirectory(subdirectory);
}
// Insert logic for processing found files here.
public static void ProcessFile(string fileName)
{
if (!fileName.Contains(".unity") || fileName.Contains(".meta")) return;
var name = fileName.Substring(fileName.LastIndexOf('\\') + 1);
name = name.Substring(0, name.Length - 6);
var sceneInfo = new SceneInfo
{
SceneName = name,
ScenePath = fileName
};
Scenes.Add(sceneInfo);
}
}