MagicaRenderDeformerInspector.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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(MagicaRenderDeformer))]
  12. public class MagicaRenderDeformerInspector : Editor
  13. {
  14. protected void OnEnable()
  15. {
  16. // 初期データ作成
  17. MagicaRenderDeformer scr = target as MagicaRenderDeformer;
  18. if (EditorApplication.isPlaying == false && scr.SaveDataHash == 0 && scr.SaveDataVersion == 0 && scr.GetComponent<Renderer>())
  19. {
  20. Debug.Log("Init Render Deformer data.");
  21. BuildManager.CreateComponent(scr);
  22. }
  23. }
  24. public override void OnInspectorGUI()
  25. {
  26. MagicaRenderDeformer scr = target as MagicaRenderDeformer;
  27. serializedObject.Update();
  28. // データ検証
  29. if (EditorApplication.isPlaying == false)
  30. VerifyData();
  31. // データ状態
  32. EditorInspectorUtility.DispVersionStatus(scr);
  33. EditorInspectorUtility.DispDataStatus(scr);
  34. Undo.RecordObject(scr, "CreateRenderMesh");
  35. // モニターボタン
  36. EditorInspectorUtility.MonitorButtonInspector();
  37. DrawRenderDeformerInspector();
  38. // データ作成
  39. if (EditorApplication.isPlaying == false)
  40. {
  41. EditorGUILayout.Space();
  42. GUI.backgroundColor = Color.red;
  43. if (GUILayout.Button("Create"))
  44. {
  45. Undo.RecordObject(scr, "CreateRenderMeshData");
  46. BuildManager.CreateComponent(scr);
  47. }
  48. GUI.backgroundColor = Color.white;
  49. serializedObject.ApplyModifiedProperties();
  50. }
  51. }
  52. void DrawRenderDeformerInspector()
  53. {
  54. MagicaRenderDeformer scr = target as MagicaRenderDeformer;
  55. serializedObject.Update();
  56. EditorGUILayout.LabelField("Update Mode", EditorStyles.boldLabel);
  57. var property1 = serializedObject.FindProperty("deformer.normalAndTangentUpdateMode");
  58. var value1 = property1.boolValue;
  59. var property2 = serializedObject.FindProperty("deformer.boundsUpdateMode");
  60. using (new EditorGUI.DisabledScope(EditorApplication.isPlaying))
  61. {
  62. EditorGUILayout.PropertyField(property1);
  63. EditorGUILayout.PropertyField(property2);
  64. }
  65. serializedObject.ApplyModifiedProperties();
  66. if (property1.boolValue != value1)
  67. scr.Deformer.ChangeNormalTangentUpdateMode(); // 変更を通知
  68. }
  69. //=========================================================================================
  70. /// <summary>
  71. /// データ検証
  72. /// </summary>
  73. private void VerifyData()
  74. {
  75. MagicaRenderDeformer scr = target as MagicaRenderDeformer;
  76. if (scr.VerifyData() != Define.Error.None)
  77. {
  78. // 検証エラー
  79. serializedObject.ApplyModifiedProperties();
  80. }
  81. }
  82. }
  83. }