1
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using MuHua;
|
||||
|
||||
namespace MuHuaEditor {
|
||||
[CustomPropertyDrawer(typeof(SceneNameAttribute))]
|
||||
public class SceneNameDrawer : PropertyDrawer {
|
||||
int sceneIndex = -1;
|
||||
GUIContent[] sceneNames;
|
||||
|
||||
readonly string[] scenePathSplit = { "/", ".unity" };
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
|
||||
if (EditorBuildSettings.scenes.Length == 0) return;
|
||||
|
||||
if (sceneIndex == -1)
|
||||
GetSceneNameArray(property);
|
||||
|
||||
int oldIndex = sceneIndex;
|
||||
|
||||
sceneIndex = EditorGUI.Popup(position, label, sceneIndex, sceneNames);
|
||||
|
||||
if (oldIndex != sceneIndex)
|
||||
property.stringValue = sceneNames[sceneIndex].text;
|
||||
}
|
||||
|
||||
private void GetSceneNameArray(SerializedProperty property) {
|
||||
var scenes = EditorBuildSettings.scenes;
|
||||
//初始化数组
|
||||
sceneNames = new GUIContent[scenes.Length];
|
||||
|
||||
for (int i = 0; i < sceneNames.Length; i++) {
|
||||
string path = scenes[i].path;
|
||||
string[] splitPath = path.Split(scenePathSplit, System.StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
string sceneName = "";
|
||||
|
||||
if (splitPath.Length > 0) {
|
||||
sceneName = splitPath[splitPath.Length - 1];
|
||||
}
|
||||
else {
|
||||
sceneName = "(Deleted Scene)";
|
||||
}
|
||||
sceneNames[i] = new GUIContent(sceneName);
|
||||
}
|
||||
|
||||
if (sceneNames.Length == 0) {
|
||||
sceneNames = new[] { new GUIContent("Check Your Build Settings") };
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(property.stringValue)) {
|
||||
bool nameFound = false;
|
||||
|
||||
for (int i = 0; i < sceneNames.Length; i++) {
|
||||
if (sceneNames[i].text == property.stringValue) {
|
||||
sceneIndex = i;
|
||||
nameFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (nameFound == false)
|
||||
sceneIndex = 0;
|
||||
}
|
||||
else {
|
||||
sceneIndex = 0;
|
||||
}
|
||||
|
||||
property.stringValue = sceneNames[sceneIndex].text;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user