PXR_Audio_Spatializer_SceneGeometryEditor.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using UnityEditor;
  2. using UnityEngine;
  3. [CustomEditor(typeof(PXR_Audio_Spatializer_SceneGeometry))]
  4. [CanEditMultipleObjects]
  5. public class PXR_Audio_Spatializer_SceneGeometryEditor : Editor
  6. {
  7. private SerializedProperty includeChildren;
  8. private SerializedProperty visualizeMeshInEditor;
  9. private SerializedProperty bakedStaticMesh;
  10. private SerializedProperty meshBakingLayerMask;
  11. private bool showMeshBakingUtilsFlag = true;
  12. private string showMeshBakingUtilities = "Static mesh baking utilities";
  13. void OnEnable()
  14. {
  15. includeChildren = serializedObject.FindProperty("includeChildren");
  16. visualizeMeshInEditor = serializedObject.FindProperty("visualizeMeshInEditor");
  17. bakedStaticMesh = serializedObject.FindProperty("bakedStaticMesh");
  18. meshBakingLayerMask = serializedObject.FindProperty("meshBakingLayerMask");
  19. }
  20. public override void OnInspectorGUI()
  21. {
  22. serializedObject.Update();
  23. // Boolean flags
  24. EditorGUILayout.PropertyField(includeChildren);
  25. EditorGUILayout.PropertyField(visualizeMeshInEditor);
  26. // Static mesh baking utilities
  27. showMeshBakingUtilsFlag = EditorGUILayout.Foldout(showMeshBakingUtilsFlag, showMeshBakingUtilities);
  28. if (showMeshBakingUtilsFlag)
  29. {
  30. EditorGUI.indentLevel++;
  31. EditorGUILayout.PropertyField(meshBakingLayerMask);
  32. serializedObject.ApplyModifiedProperties();
  33. EditorGUILayout.BeginHorizontal();
  34. GUILayout.Space(EditorGUI.indentLevel * 15);
  35. if (GUILayout.Button("Bake"))
  36. {
  37. var start = Time.realtimeSinceStartup;
  38. Undo.IncrementCurrentGroup();
  39. var undoGroupIndex = Undo.GetCurrentGroup();
  40. string bakedObjectNames = "";
  41. int meshCount = 0;
  42. foreach (var t in targets)
  43. {
  44. PXR_Audio_Spatializer_SceneGeometry geometry = (PXR_Audio_Spatializer_SceneGeometry)t;
  45. bakedObjectNames += geometry.name + ", ";
  46. Undo.RecordObject(geometry, "");
  47. meshCount += geometry.BakeStaticMesh(meshBakingLayerMask.intValue);
  48. PrefabUtility.RecordPrefabInstancePropertyModifications(geometry);
  49. }
  50. Undo.SetCurrentGroupName("Bake static meshes for gameObject: " + bakedObjectNames);
  51. Undo.CollapseUndoOperations(undoGroupIndex);
  52. var durationMs = (Time.realtimeSinceStartup - start) * 1000;
  53. Debug.LogFormat("Baked static {0} meshes for gameObject: {1}in {2:f4} ms", meshCount, bakedObjectNames,
  54. durationMs);
  55. }
  56. if (GUILayout.Button("Clear"))
  57. {
  58. Undo.IncrementCurrentGroup();
  59. var undoGroupIndex = Undo.GetCurrentGroup();
  60. string bakedObjectNames = "";
  61. foreach (var t in targets)
  62. {
  63. PXR_Audio_Spatializer_SceneGeometry geometry = (PXR_Audio_Spatializer_SceneGeometry)t;
  64. bakedObjectNames += geometry.name + ", ";
  65. Undo.RecordObject(geometry, "");
  66. geometry.ClearBakeStaticMesh();
  67. PrefabUtility.RecordPrefabInstancePropertyModifications(geometry);
  68. }
  69. Undo.SetCurrentGroupName("Clear baked static meshes for gameObject: " + bakedObjectNames);
  70. Undo.CollapseUndoOperations(undoGroupIndex);
  71. Debug.LogFormat("Cleared baked static meshes for gameObject: {0}", bakedObjectNames);
  72. }
  73. GUILayout.Space(EditorGUI.indentLevel * 15 - 15);
  74. EditorGUILayout.EndHorizontal();
  75. serializedObject.Update();
  76. EditorGUILayout.PropertyField(bakedStaticMesh);
  77. serializedObject.ApplyModifiedProperties();
  78. EditorGUI.indentLevel--;
  79. }
  80. else
  81. {
  82. serializedObject.ApplyModifiedProperties();
  83. }
  84. }
  85. }
粤ICP备19079148号