| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- using UnityEditor;
- using UnityEngine;
- [CustomEditor(typeof(PXR_Audio_Spatializer_SceneGeometry))]
- [CanEditMultipleObjects]
- public class PXR_Audio_Spatializer_SceneGeometryEditor : Editor
- {
- private SerializedProperty includeChildren;
- private SerializedProperty visualizeMeshInEditor;
- private SerializedProperty bakedStaticMesh;
- private SerializedProperty meshBakingLayerMask;
- private bool showMeshBakingUtilsFlag = true;
- private string showMeshBakingUtilities = "Static mesh baking utilities";
- void OnEnable()
- {
- includeChildren = serializedObject.FindProperty("includeChildren");
- visualizeMeshInEditor = serializedObject.FindProperty("visualizeMeshInEditor");
- bakedStaticMesh = serializedObject.FindProperty("bakedStaticMesh");
- meshBakingLayerMask = serializedObject.FindProperty("meshBakingLayerMask");
- }
- public override void OnInspectorGUI()
- {
- serializedObject.Update();
- // Boolean flags
- EditorGUILayout.PropertyField(includeChildren);
- EditorGUILayout.PropertyField(visualizeMeshInEditor);
- // Static mesh baking utilities
- showMeshBakingUtilsFlag = EditorGUILayout.Foldout(showMeshBakingUtilsFlag, showMeshBakingUtilities);
- if (showMeshBakingUtilsFlag)
- {
- EditorGUI.indentLevel++;
-
- EditorGUILayout.PropertyField(meshBakingLayerMask);
- serializedObject.ApplyModifiedProperties();
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(EditorGUI.indentLevel * 15);
- if (GUILayout.Button("Bake"))
- {
- var start = Time.realtimeSinceStartup;
- Undo.IncrementCurrentGroup();
- var undoGroupIndex = Undo.GetCurrentGroup();
- string bakedObjectNames = "";
- int meshCount = 0;
- foreach (var t in targets)
- {
- PXR_Audio_Spatializer_SceneGeometry geometry = (PXR_Audio_Spatializer_SceneGeometry)t;
- bakedObjectNames += geometry.name + ", ";
- Undo.RecordObject(geometry, "");
- meshCount += geometry.BakeStaticMesh(meshBakingLayerMask.intValue);
- PrefabUtility.RecordPrefabInstancePropertyModifications(geometry);
- }
- Undo.SetCurrentGroupName("Bake static meshes for gameObject: " + bakedObjectNames);
- Undo.CollapseUndoOperations(undoGroupIndex);
- var durationMs = (Time.realtimeSinceStartup - start) * 1000;
- Debug.LogFormat("Baked static {0} meshes for gameObject: {1}in {2:f4} ms", meshCount, bakedObjectNames,
- durationMs);
- }
- if (GUILayout.Button("Clear"))
- {
- Undo.IncrementCurrentGroup();
- var undoGroupIndex = Undo.GetCurrentGroup();
- string bakedObjectNames = "";
- foreach (var t in targets)
- {
- PXR_Audio_Spatializer_SceneGeometry geometry = (PXR_Audio_Spatializer_SceneGeometry)t;
- bakedObjectNames += geometry.name + ", ";
- Undo.RecordObject(geometry, "");
- geometry.ClearBakeStaticMesh();
- PrefabUtility.RecordPrefabInstancePropertyModifications(geometry);
- }
- Undo.SetCurrentGroupName("Clear baked static meshes for gameObject: " + bakedObjectNames);
- Undo.CollapseUndoOperations(undoGroupIndex);
- Debug.LogFormat("Cleared baked static meshes for gameObject: {0}", bakedObjectNames);
- }
- GUILayout.Space(EditorGUI.indentLevel * 15 - 15);
- EditorGUILayout.EndHorizontal();
- serializedObject.Update();
- EditorGUILayout.PropertyField(bakedStaticMesh);
- serializedObject.ApplyModifiedProperties();
- EditorGUI.indentLevel--;
- }
- else
- {
- serializedObject.ApplyModifiedProperties();
- }
- }
- }
|