MagicaPhysicsManagerInspector.cs 3.5 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(MagicaPhysicsManager))]
  12. public class MagicaPhysicsManagerInspector : Editor
  13. {
  14. public override void OnInspectorGUI()
  15. {
  16. //DrawDefaultInspector();
  17. MagicaPhysicsManager scr = target as MagicaPhysicsManager;
  18. serializedObject.Update();
  19. Undo.RecordObject(scr, "PhysicsManager");
  20. MainInspector();
  21. EventInspector();
  22. serializedObject.ApplyModifiedProperties();
  23. }
  24. void MainInspector()
  25. {
  26. MagicaPhysicsManager scr = target as MagicaPhysicsManager;
  27. EditorGUILayout.Space();
  28. EditorGUILayout.LabelField("Update", EditorStyles.boldLabel);
  29. using (new EditorGUI.IndentLevelScope())
  30. {
  31. var prop = serializedObject.FindProperty("updateTime.updatePerSeccond");
  32. EditorGUILayout.PropertyField(prop);
  33. var prop2 = serializedObject.FindProperty("updateTime.updateMode");
  34. EditorGUILayout.PropertyField(prop2);
  35. // 以下は遅延実行時のみ
  36. if (scr.UpdateTime.IsDelay)
  37. {
  38. var prop3 = serializedObject.FindProperty("updateTime.futurePredictionRate");
  39. EditorGUILayout.PropertyField(prop3);
  40. }
  41. Help1();
  42. }
  43. // 高速書き込み
  44. #if UNITY_2021_2_OR_NEWER
  45. const bool useFasterWrite = true;
  46. #else
  47. const bool useFasterWrite = false;
  48. #endif
  49. EditorGUILayout.Space();
  50. using (new EditorGUI.DisabledScope(EditorApplication.isPlaying || useFasterWrite == false))
  51. {
  52. var prop4 = serializedObject.FindProperty("useFasterWrite");
  53. EditorGUILayout.PropertyField(prop4, new GUIContent("Faster Write (Experimental)"));
  54. }
  55. EditorGUILayout.HelpBox("Faster Write is a fast mesh write with a new vertex buffer.\nAvailable in Unity 2021.2 and later.", MessageType.Info);
  56. }
  57. void Help1()
  58. {
  59. MagicaPhysicsManager scr = target as MagicaPhysicsManager;
  60. if (scr.UpdateMode == UpdateTimeManager.UpdateMode.OncePerFrame)
  61. {
  62. EditorGUILayout.HelpBox("[OncePerFrame] must have stable FPS.", MessageType.Info);
  63. }
  64. else if (scr.UpdateTime.IsDelay)
  65. {
  66. EditorGUILayout.HelpBox(
  67. "Delayed execution. [experimental]\n" +
  68. "Improve performance by running simulations during rendering.\n" +
  69. "Note, however, that the result is one frame late.\n" +
  70. "This delay is covered by future predictions.",
  71. MessageType.Info);
  72. }
  73. }
  74. private void EventInspector()
  75. {
  76. MagicaPhysicsManager scr = target as MagicaPhysicsManager;
  77. var pre = serializedObject.FindProperty("OnPreUpdate");
  78. var post = serializedObject.FindProperty("OnPostUpdate");
  79. EditorGUILayout.Space();
  80. EditorGUILayout.LabelField("Events", EditorStyles.boldLabel);
  81. EditorGUILayout.PropertyField(pre);
  82. EditorGUILayout.PropertyField(post);
  83. }
  84. }
  85. }