53 lines
1.4 KiB
C#
53 lines
1.4 KiB
C#
using UnityEditor;
|
|
|
|
|
|
namespace VRM
|
|
{
|
|
[CustomEditor(typeof(VRMMeta))]
|
|
public class VRMMetaEditor : Editor
|
|
{
|
|
VRMMeta m_target;
|
|
Editor m_Inspector;
|
|
SerializedProperty m_VRMMetaObjectProp;
|
|
|
|
void DestroyEditor()
|
|
{
|
|
UnityEditor.Editor.DestroyImmediate(m_Inspector);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
DestroyEditor();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
m_target = target as VRMMeta;
|
|
m_VRMMetaObjectProp = serializedObject.FindProperty(nameof(VRMMeta.Meta));
|
|
if (m_target.Meta != null)
|
|
{
|
|
m_Inspector = Editor.CreateEditor(m_VRMMetaObjectProp.objectReferenceValue);
|
|
}
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
serializedObject.Update();
|
|
var old = m_VRMMetaObjectProp.objectReferenceValue;
|
|
EditorGUILayout.PropertyField(m_VRMMetaObjectProp);
|
|
if (m_VRMMetaObjectProp.objectReferenceValue != old)
|
|
{
|
|
// updated
|
|
serializedObject.ApplyModifiedProperties();
|
|
DestroyEditor();
|
|
m_Inspector = Editor.CreateEditor(m_VRMMetaObjectProp.objectReferenceValue);
|
|
}
|
|
|
|
if (m_Inspector != null)
|
|
{
|
|
m_Inspector.OnInspectorGUI();
|
|
}
|
|
}
|
|
}
|
|
}
|