BuildSettings에서 Scene 변환에 사용되는 Scene 이름을 읽는 편집기 확장
SceneManager.LoadScene("遷移先のScene名");
쓰여 있다.string을 코드에 직접 쓰는 것은 typo의 발생과 Scene 이름의 변경이 약하다는 문제점이 있기 때문에 Build Settings에서 Scene의 Path를 읽고 밑에 있는 메뉴의Property Attribute를 만들었습니다.
SceneChangerAttribute.cs
using UnityEngine;
#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
#endif
class SceneChangerAttribute : PropertyAttribute { }
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(SceneChangerAttribute))]
public class SceneChangerEditor : PropertyDrawer
{
//Scene名のList
List<string> AllSceneName
{
get
{
List<string> sceneNames = new List<string>();
//BuildSettingsからSceneのPathを読み込む
List<string> AllPaths = (from scene in EditorBuildSettings.scenes where scene.enabled select scene.path).ToList();
//PathからScene名を切り出す
foreach (string x in AllPaths)
{
int slash = x.LastIndexOf("/");
int dot = x.LastIndexOf(".");
sceneNames.Add(x.Substring(slash + 1, dot - slash - 1));
}
return sceneNames;
}
}
//ドロップダウンメニューの作成
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
var list = AllSceneName;
var selectedIndex = list.FindIndex(item => item.Equals(property.stringValue));
if (selectedIndex == -1)
{
selectedIndex = list.FindIndex(item => item.Equals(list[0]));
}
selectedIndex = EditorGUI.Popup(position, label.text, selectedIndex, list.ToArray());
property.stringValue = list[selectedIndex];
}
}
#endif
사용할 때는 위의 ScenneChangerAttribute를 참조하십시오.다음과 같이 Unity 프로젝트에 cs를 배치합니다(예: Buton에서 Scene 마이그레이션을 수행하려는 경우).SceneChanger4Button.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class SceneChanger4Button : MonoBehaviour
{
//どんな名前でもいいのでstring型のフィールドに付ける
[SerializeField, SceneChangerAttribute]
string _NextScene;
void OnClick()
{
SceneManager.LoadScene(_NextScene);
}
}
이렇게 하면 BuildSettings에 추가된 Scene의 이름이 표시됩니다.
장점은 typo와 편집기에서 목적지 이동을 알지 못하는 것이다.
단점은 BuildSettings에서 Scene의 순서를 바꾸면 대응이 안 되고 다시 설정해야 한다는 것이다. 다만 제목에 사용된 Scene을 0으로 설정한 것 외에 순서를 바꾸는 경우가 거의 없기 때문에 큰 영향은 없을 것 같다.
참고 문헌
요약 메모리 Unity의 Attribute(속성)
Reference
이 문제에 관하여(BuildSettings에서 Scene 변환에 사용되는 Scene 이름을 읽는 편집기 확장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keel/items/11ec62aff184a3a2cccc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)