Skip to content

Commit 084fe59

Browse files
committed
Created Scene Rename Order Editor
1 parent 969005e commit 084fe59

File tree

6 files changed

+178
-0
lines changed

6 files changed

+178
-0
lines changed

Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/SceneRenamerEditor.cs

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// **************************************************************** //
2+
//
3+
// Copyright (c) RimuruDev. All rights reserved.
4+
// Contact me:
5+
// - Gmail: rimuru.dev@gmail.com
6+
// - LinkedIn: https://www.linkedin.com/in/rimuru/
7+
// - GitHub: https://github.com/RimuruDev
8+
//
9+
// **************************************************************** //
10+
11+
using UnityEditor;
12+
using UnityEngine;
13+
using UnityEditorInternal;
14+
using System.Collections.Generic;
15+
16+
namespace RimuruDev
17+
{
18+
public sealed class SceneOrderEditor : EditorWindow
19+
{
20+
private ReorderableList sceneList;
21+
22+
// ReSharper disable once FieldCanBeMadeReadOnly.Local // Note: Don't limit List with readonly!!!!
23+
private List<SceneAsset> scenes = new();
24+
25+
private Vector2 scrollPos;
26+
private string sceneFolderPath = "Assets/Scenes";
27+
private string namePattern = "Level_";
28+
private bool foldout = true;
29+
30+
[MenuItem("RimuruDev Tools/Scene Order Editor")]
31+
public static void ShowWindow() =>
32+
GetWindow(typeof(SceneOrderEditor), false, "Scene Order Editor");
33+
34+
private void OnEnable()
35+
{
36+
sceneList = new ReorderableList(scenes, typeof(SceneAsset), true, true, true, true)
37+
{
38+
drawHeaderCallback = rect => { EditorGUI.LabelField(rect, "Drag Scenes Here:"); },
39+
drawElementCallback = (rect, index, _, _) =>
40+
{
41+
scenes[index] = (SceneAsset)EditorGUI.ObjectField(
42+
position: new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight),
43+
scenes[index],
44+
typeof(SceneAsset),
45+
allowSceneObjects: false
46+
);
47+
}
48+
};
49+
}
50+
51+
private void OnGUI()
52+
{
53+
EditorGUI.BeginChangeCheck();
54+
foldout = EditorGUILayout.Foldout(foldout, "Scene Folder Path and Naming Pattern", true);
55+
56+
if (foldout)
57+
{
58+
sceneFolderPath = EditorGUILayout.TextField("Folder Path:", sceneFolderPath);
59+
namePattern = EditorGUILayout.TextField("Name Pattern:", namePattern);
60+
61+
if (GUILayout.Button("Load Scenes From Folder"))
62+
LoadScenesFromFolder();
63+
}
64+
65+
if (EditorGUI.EndChangeCheck())
66+
LoadScenesFromFolder();
67+
68+
scrollPos = GUILayout.BeginScrollView(
69+
scrollPos,
70+
GUILayout.Width(position.width),
71+
GUILayout.Height(position.height - 200));
72+
73+
sceneList.DoLayoutList();
74+
75+
GUILayout.EndScrollView();
76+
77+
if (GUILayout.Button("Rename and Reorder Scenes"))
78+
RenameScenes();
79+
}
80+
81+
private void LoadScenesFromFolder()
82+
{
83+
scenes.Clear();
84+
85+
var guids = AssetDatabase.FindAssets("t:Scene", new[] { sceneFolderPath });
86+
87+
foreach (var guid in guids)
88+
{
89+
var path = AssetDatabase.GUIDToAssetPath(guid);
90+
var sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(path);
91+
92+
if (sceneAsset != null)
93+
scenes.Add(sceneAsset);
94+
}
95+
}
96+
97+
private void RenameScenes()
98+
{
99+
for (var i = 0; i < scenes.Count; i++)
100+
{
101+
var path = AssetDatabase.GetAssetPath(scenes[i]);
102+
var tempSceneName = $"Temp_{namePattern}{i}";
103+
104+
AssetDatabase.RenameAsset(path, tempSceneName);
105+
}
106+
107+
AssetDatabase.SaveAssets();
108+
AssetDatabase.Refresh();
109+
110+
for (var i = 0; i < scenes.Count; i++)
111+
{
112+
var oldPath = AssetDatabase.GetAssetPath(scenes[i]);
113+
var newSceneName = $"{namePattern}{i}";
114+
115+
AssetDatabase.RenameAsset(oldPath, newSceneName);
116+
}
117+
118+
AssetDatabase.SaveAssets();
119+
AssetDatabase.Refresh();
120+
121+
Debug.Log("<color=yellow>Scenes renamed and reordered based on the list.</color>");
122+
}
123+
}
124+
}

Editor/SceneRenamerEditor.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LICENSE.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "com.rimurudev.scene-rename-order-editor",
3+
"version": "1.0.0",
4+
"displayName": "RimuruDev",
5+
"description": "Specify the order of scenes in the hierarchy and rename in one click!",
6+
"unity": "2019.1",
7+
"dependencies": {},
8+
"keywords": [
9+
"rimurudev",
10+
"rimuru-dev",
11+
"abyssmoth",
12+
"gamedev",
13+
"unity",
14+
"tool",
15+
"unity-editor",
16+
"utility",
17+
"plugins",
18+
"unity-tools"
19+
],
20+
"author": {
21+
"name": "RimuruDev",
22+
"email": "rimuru.dev@gmail.com",
23+
"url": "https://github.com/RimuruDev"
24+
}
25+
}

package.json.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)