MagicaVirtualDeformerInspector.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Magica Cloth.
  2. // Copyright (c) MagicaSoft, 2020-2022.
  3. // https://magicasoft.jp
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace MagicaCloth
  7. {
  8. /// <summary>
  9. /// 仮想デフォーマーのエディタ拡張
  10. /// </summary>
  11. [CustomEditor(typeof(MagicaVirtualDeformer))]
  12. public class MagicaVirtualDeformerInspector : Editor
  13. {
  14. public override void OnInspectorGUI()
  15. {
  16. MagicaVirtualDeformer scr = target as MagicaVirtualDeformer;
  17. //DrawDefaultInspector();
  18. serializedObject.Update();
  19. // データ検証
  20. if (EditorApplication.isPlaying == false)
  21. VerifyData();
  22. // データ状態
  23. EditorInspectorUtility.DispVersionStatus(scr);
  24. EditorInspectorUtility.DispDataStatus(scr);
  25. Undo.RecordObject(scr, "CreateVirtualDeformer");
  26. // モニターボタン
  27. EditorInspectorUtility.MonitorButtonInspector();
  28. DrawVirtualDeformerInspector();
  29. // データ作成
  30. if (EditorApplication.isPlaying == false)
  31. {
  32. EditorGUILayout.Space();
  33. GUI.backgroundColor = Color.red;
  34. if (GUILayout.Button("Create"))
  35. {
  36. Undo.RecordObject(scr, "CreateVirtualMeshData");
  37. BuildManager.CreateComponent(scr);
  38. }
  39. GUI.backgroundColor = Color.white;
  40. serializedObject.ApplyModifiedProperties();
  41. }
  42. }
  43. void DrawVirtualDeformerInspector()
  44. {
  45. MagicaVirtualDeformer scr = target as MagicaVirtualDeformer;
  46. serializedObject.Update();
  47. //EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.renderDeformerList"), true);
  48. EditorInspectorUtility.DrawObjectList<MagicaRenderDeformer>(
  49. serializedObject.FindProperty("deformer.renderDeformerList"),
  50. scr.gameObject,
  51. true, true,
  52. () => scr.gameObject.transform.root.GetComponentsInChildren<MagicaRenderDeformer>()
  53. );
  54. EditorGUILayout.Space();
  55. EditorGUILayout.LabelField("Reduction Setting", EditorStyles.boldLabel);
  56. EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.mergeVertexDistance"));
  57. EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.mergeTriangleDistance"));
  58. EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.sameSurfaceAngle"));
  59. EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.useSkinning"));
  60. EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.maxWeightCount"));
  61. EditorGUILayout.PropertyField(serializedObject.FindProperty("deformer.weightPow"));
  62. serializedObject.ApplyModifiedProperties();
  63. }
  64. //=========================================================================================
  65. /// <summary>
  66. /// データ検証
  67. /// </summary>
  68. private void VerifyData()
  69. {
  70. MagicaVirtualDeformer scr = target as MagicaVirtualDeformer;
  71. if (scr.VerifyData() != Define.Error.None)
  72. {
  73. // 検証エラー
  74. //scr.SetVerifyError();
  75. serializedObject.ApplyModifiedProperties();
  76. }
  77. }
  78. }
  79. }