您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

92 行
2.8 KiB

using System.Linq;
using UniGLTF;
using UnityEditor;
using UnityEngine;
namespace UniVRM10
{
[CustomEditor(typeof(VRM10Object))]
public class VRM10ObjectEditor : Editor
{
VRM10Object m_target;
enum Tabs
{
Meta,
Expression,
LookAt,
FirstPerson,
}
static Tabs _tab = Tabs.Meta;
// for SerializedProperty
SerializedPropertyEditor m_expression;
SerializedPropertyEditor m_meta;
SerializedPropertyEditor m_lookAt;
SerializedPropertyEditor m_firstPerson;
SerializedProperty m_prefab;
void OnEnable()
{
if (target == null)
{
return;
}
m_target = (VRM10Object)target;
m_expression = SerializedPropertyEditor.Create(serializedObject, nameof(m_target.Expression));
m_meta = VRM10MetaEditor.Create(serializedObject);
m_lookAt = SerializedPropertyEditor.Create(serializedObject, nameof(m_target.LookAt));
m_firstPerson = SerializedPropertyEditor.Create(serializedObject, nameof(m_target.FirstPerson));
m_prefab = serializedObject.FindProperty("m_prefab");
}
public override void OnInspectorGUI()
{
// prefab
if (_tab == Tabs.FirstPerson && m_prefab.objectReferenceValue == null)
{
EditorGUILayout.HelpBox("required !", MessageType.Error);
}
serializedObject.Update();
EditorGUILayout.ObjectField(m_prefab);
serializedObject.ApplyModifiedProperties();
EditorGUILayout.Separator();
// select sub editor
using (new EnabledScope())
{
_tab = (Tabs)EditorGUILayout.EnumPopup("Select GUI", _tab);
}
EditorGUILayout.Separator();
switch (_tab)
{
case Tabs.Meta:
m_meta.OnInspectorGUI();
break;
case Tabs.Expression:
m_expression.OnInspectorGUI();
break;
case Tabs.LookAt:
m_lookAt.OnInspectorGUI();
break;
case Tabs.FirstPerson:
using (new EditorGUI.DisabledScope(m_target.Prefab == null))
{
if (GUILayout.Button("set default"))
{
m_target.FirstPerson.SetDefault(m_target.Prefab.transform);
}
EditorGUILayout.HelpBox("Clear Renderers and add all renderers (Auto)", MessageType.Info);
}
m_firstPerson.OnInspectorGUI();
break;
}
}
}
}