728x90
유니티에서 빌드 세팅에 추가된 씬들을 Enum 으로 관리하고 싶다는 Needs 가 생겼다.
유니티에서는 씬에 접근할 때, 씬의 이름 string 이나, 씬의 BuildIndex int 로 접근하는데,
해당 방식이 코드 상에서 명확하지 않다는 점이 존재한다.
그렇다고 씬이 많아지면 일일히 빌드 인덱스에 대치되는 Enum을 손수 작성하기는 귀찮다.
따라서, 씬을 빌드 세팅에 추가하면, 자동으로 Enum Class 를 생성해주는 스크립트를 작성해보았다.
필요한 분이 계시다면 도움이 되었으면 합니다.
using System.Collections.Generic;
using System.IO;
using UnityEditor;
public class SceneNameEnumCreator
{
[InitializeOnLoadMethod]
public static void RegisterSceneListChangedCallback()
{
EditorBuildSettings.sceneListChanged -= CreateEnum;
EditorBuildSettings.sceneListChanged += CreateEnum;
}
[MenuItem("Tools/Create scene enum file")]
public static void CreateEnum()
{
EditorBuildSettingsScene[] sceneList = EditorBuildSettings.scenes;
if (sceneList.Length == 0) return;
if (Directory.Exists("Assets/Scripts/AutoCreated/Enum/") == false)
{
Directory.CreateDirectory("Assets/Scripts/AutoCreated/Enum/");
}
List<string> sceneNameList = new List<string>();
foreach (var scene in sceneList)
{
string[] paths = scene.path.Split('/');
sceneNameList.Add(paths[paths.Length - 1].Split('.')[0]);
}
StreamWriter sw = new StreamWriter("Assets/Scripts/AutoCreated/Enum/ESceneName.cs");
sw.WriteLine("// This enum is auto created by SceneNameEnumCreator.cs");
sw.WriteLine();
sw.WriteLine("public enum ESceneName");
sw.WriteLine('{');
foreach (var sceneName in sceneNameList)
{
sw.WriteLine($"\t{sceneName},");
}
sw.WriteLine("}");
sw.Close();
UnityEngine.Debug.Log("Successfully created scene enum file.");
}
}
여기서 [InitializeOnLoadMethod] Attribute 가 지정된 함수는 에디터 갱신 시 마다 호출되며,
이 시점에 Enum 을 생성한다.
728x90
'유니티 & C#' 카테고리의 다른 글
유니티 - 런타임에 이미지 로드하여 스프라이트 생성하기 (0) | 2023.11.01 |
---|---|
유니티 UI 이미지가 보이지 않을 때 Maskable 옵션 확인하기 (2) | 2023.11.01 |
유니티 - Define Symbol 코드로 제어하기 (0) | 2023.10.24 |
유니티 - 현재 BuildTargetGroup, BuildTarget 을 가져오는 방법 (0) | 2023.10.24 |
유니티 커스텀 에디터 윈도우 생성 방법 (0) | 2023.10.24 |