// Magica Cloth. // Copyright (c) MagicaSoft, 2020-2022. // https://magicasoft.jp using UnityEditor; using UnityEngine; namespace MagicaCloth { /// /// 仮想デフォーマーのエディタ拡張 /// [CustomEditor(typeof(MagicaVirtualDeformer))] public class MagicaVirtualDeformerInspector : Editor { public override void OnInspectorGUI() { MagicaVirtualDeformer scr = target as MagicaVirtualDeformer; //DrawDefaultInspector(); serializedObject.Update(); // データ検証 if (EditorApplication.isPlaying == false) VerifyData(); // データ状態 EditorInspectorUtility.DispVersionStatus(scr); EditorInspectorUtility.DispDataStatus(scr); Undo.RecordObject(scr, "CreateVirtualDeformer"); // モニターボタン EditorInspectorUtility.MonitorButtonInspector(); DrawVirtualDeformerInspector(); // データ作成 if (EditorApplication.isPlaying == false) { EditorGUILayout.Space(); GUI.backgroundColor = Color.red; if (GUILayout.Button("Create")) { Undo.RecordObject(scr, "CreateVirtualMeshData"); BuildManager.CreateComponent(scr); } GUI.backgroundColor = Color.white; serializedObject.ApplyModifiedProperties(); } } void DrawVirtualDeformerInspector() { MagicaVirtualDeformer scr = target as MagicaVirtualDeformer; serializedObject.Update(); //EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.renderDeformerList"), true); EditorInspectorUtility.DrawObjectList( serializedObject.FindProperty("deformer.renderDeformerList"), scr.gameObject, true, true, () => scr.gameObject.transform.root.GetComponentsInChildren() ); EditorGUILayout.Space(); EditorGUILayout.LabelField("Reduction Setting", EditorStyles.boldLabel); EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.mergeVertexDistance")); EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.mergeTriangleDistance")); EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.sameSurfaceAngle")); EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.useSkinning")); EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.maxWeightCount")); EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.weightPow")); serializedObject.ApplyModifiedProperties(); } //========================================================================================= /// /// データ検証 /// private void VerifyData() { MagicaVirtualDeformer scr = target as MagicaVirtualDeformer; if (scr.VerifyData() != Define.Error.None) { // 検証エラー //scr.SetVerifyError(); serializedObject.ApplyModifiedProperties(); } } } }