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();
}
}
}
}