using UnityEngine; #if UNITY_EDITOR namespace Wwise.Wooduan.Editor.Components { [UnityEditor.CustomEditor(typeof(AkSurfaceReflector))] [UnityEditor.CanEditMultipleObjects] public class AkSurfaceReflectorInspector : UnityEditor.Editor { private AkSurfaceReflector m_AkSurfaceReflector; private UnityEditor.SerializedProperty Mesh; private UnityEditor.SerializedProperty AcousticTextures; private UnityEditor.SerializedProperty OcclusionValues; private UnityEditor.SerializedProperty EnableDiffraction; private UnityEditor.SerializedProperty EnableDiffractionOnBoundaryEdges; private UnityEditor.SerializedProperty AssociatedRoom; private UnityEditor.SerializedProperty CullDistance; public void OnEnable() { m_AkSurfaceReflector = target as AkSurfaceReflector; Mesh = serializedObject.FindProperty("Mesh"); AcousticTextures = serializedObject.FindProperty("AcousticTextures"); OcclusionValues = serializedObject.FindProperty("TransmissionLossValues"); EnableDiffraction = serializedObject.FindProperty("EnableDiffraction"); EnableDiffractionOnBoundaryEdges = serializedObject.FindProperty("EnableDiffractionOnBoundaryEdges"); AssociatedRoom = serializedObject.FindProperty("AssociatedRoom"); CullDistance = serializedObject.FindProperty("cullDistance"); } public override void OnInspectorGUI() { serializedObject.Update(); UnityEditor.EditorGUILayout.PropertyField(Mesh); UnityEditor.EditorGUILayout.PropertyField(AcousticTextures, true); CheckArraySize(m_AkSurfaceReflector, m_AkSurfaceReflector.AcousticTextures.Length, "acoustic textures"); UnityEditor.EditorGUILayout.PropertyField(OcclusionValues, true); CheckArraySize(m_AkSurfaceReflector, m_AkSurfaceReflector.TransmissionLossValues.Length, "occlusion values"); UnityEditor.EditorGUILayout.PropertyField(EnableDiffraction); if (EnableDiffraction.boolValue) UnityEditor.EditorGUILayout.PropertyField(EnableDiffractionOnBoundaryEdges); UnityEditor.EditorGUILayout.PropertyField(AssociatedRoom); UnityEditor.EditorGUILayout.PropertyField(CullDistance); if (GUILayout.Button("Auto Find Associated Room")) m_AkSurfaceReflector.AutoFindAssociatedRoom(); serializedObject.ApplyModifiedProperties(); } public static void CheckArraySize(AkSurfaceReflector surfaceReflector, int length, string name) { if (surfaceReflector != null && surfaceReflector.Mesh != null) { int maxSize = surfaceReflector.Mesh.subMeshCount; if (length > maxSize) { UnityEngine.GUILayout.Space(UnityEditor.EditorGUIUtility.standardVerticalSpacing); using (new UnityEditor.EditorGUILayout.VerticalScope("box")) { UnityEditor.EditorGUILayout.HelpBox( "There are more " + name + " than the Mesh has submeshes. Additional ones will be ignored.", UnityEditor.MessageType.Warning); } } } } } } #endif