public static void UnregisterReflector(AkSurfaceReflector reflector) { if (m_Instance != null) { m_Instance.m_Reflectors.Remove(reflector); m_Instance.m_ReflectorsToUpdate.Remove(reflector); } }
static void SelectReflectorTextureItemInWwisePicker(UnityEditor.MenuCommand command) { AkSurfaceReflector component = (AkSurfaceReflector)command.context; if (component.AcousticTextures.Length > 0 && component.AcousticTextures[0].ObjectReference != null) { SelectInWwisePicker(component.AcousticTextures[0].ObjectReference.Guid); } }
public void OnEnable() { m_AkSurfaceReflector = target as AkSurfaceReflector; Mesh = serializedObject.FindProperty("Mesh"); AcousticTextures = serializedObject.FindProperty("AcousticTextures"); OcclusionValues = serializedObject.FindProperty("OcclusionValues"); EnableDiffraction = serializedObject.FindProperty("EnableDiffraction"); EnableDiffractionOnBoundaryEdges = serializedObject.FindProperty("EnableDiffractionOnBoundaryEdges"); AssociatedRoom = serializedObject.FindProperty("AssociatedRoom"); }
public static void RegisterReflector(AkSurfaceReflector reflector) { if (m_Instance != null) { if (!m_Instance.m_Reflectors.Contains(reflector)) { m_Instance.m_Reflectors.Add(reflector); } if (!m_Instance.m_ReflectorsToUpdate.Contains(reflector)) { m_Instance.m_ReflectorsToUpdate.Add(reflector); } } }
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); } } } }
private ulong GetGeometryID() { ulong geometryID = AkSurfaceReflector.INVALID_GEOMETRY_ID; AkSurfaceReflector surfaceReflector = GetComponent <AkSurfaceReflector>(); if (surfaceReflector && surfaceReflector.enabled) { geometryID = surfaceReflector.GetID(); } else { if (roomCollider == null) { roomCollider = GetComponent <UnityEngine.Collider>(); } if (roomCollider.GetType() == typeof(UnityEngine.MeshCollider)) { geometryID = GetID(); UnityEngine.MeshCollider meshCollider = GetComponent <UnityEngine.MeshCollider>(); #if UNITY_EDITOR if (previousColliderType == typeof(UnityEngine.MeshCollider) && previousMeshCollider != null && previousMeshCollider.sharedMesh == meshCollider.sharedMesh && previousPosition == transform.position && previousRotation == transform.rotation && previousScale == transform.localScale) { return(geometryID); } #endif AkSurfaceReflector.SetGeometryFromMesh(meshCollider.sharedMesh, transform, geometryID, INVALID_ROOM_ID, false, false, false); #if UNITY_EDITOR previousMeshCollider = meshCollider; previousPosition = transform.position; previousRotation = transform.rotation; previousScale = transform.localScale; #endif previousColliderType = typeof(UnityEngine.MeshCollider); } else if (roomCollider.GetType() == typeof(UnityEngine.BoxCollider)) { geometryID = GetID(); UnityEngine.BoxCollider boxCollider = GetComponent <UnityEngine.BoxCollider>(); #if UNITY_EDITOR if (previousColliderType == typeof(UnityEngine.BoxCollider) && previousBoxCollider != null && previousPosition == roomCollider.bounds.center && previousRotation == transform.rotation && previousScale == new UnityEngine.Vector3(transform.localScale.x * boxCollider.size.x, transform.localScale.y * boxCollider.size.y, transform.localScale.z * boxCollider.size.z)) { return(geometryID); } #endif UnityEngine.GameObject tempGameObject = UnityEngine.GameObject.CreatePrimitive(UnityEngine.PrimitiveType.Cube); UnityEngine.Mesh mesh = tempGameObject.GetComponent <UnityEngine.MeshFilter>().sharedMesh; tempGameObject.transform.position = boxCollider.bounds.center; tempGameObject.transform.rotation = transform.rotation; UnityEngine.Vector3 roomScale = new UnityEngine.Vector3(); roomScale.x = transform.localScale.x * boxCollider.size.x; roomScale.y = transform.localScale.y * boxCollider.size.y; roomScale.z = transform.localScale.z * boxCollider.size.z; tempGameObject.transform.localScale = roomScale; AkSurfaceReflector.SetGeometryFromMesh(mesh, tempGameObject.transform, geometryID, INVALID_ROOM_ID, false, false, false); #if UNITY_EDITOR previousBoxCollider = boxCollider; previousPosition = tempGameObject.transform.position; previousRotation = tempGameObject.transform.rotation; previousScale = tempGameObject.transform.localScale; #endif previousColliderType = typeof(UnityEngine.BoxCollider); UnityEngine.GameObject.Destroy(tempGameObject); } else if (roomCollider.GetType() == typeof(UnityEngine.CapsuleCollider)) { geometryID = GetID(); UnityEngine.CapsuleCollider capsuleCollider = GetComponent <UnityEngine.CapsuleCollider>(); #if UNITY_EDITOR if (previousColliderType == typeof(UnityEngine.CapsuleCollider) && previousCapsuleCollider != null && previousPosition == capsuleCollider.bounds.center && previousRotation == transform.rotation && previousScale == GetCapsuleScale(transform.localScale, capsuleCollider.radius, capsuleCollider.height, capsuleCollider.direction)) { return(geometryID); } #endif UnityEngine.GameObject tempGameObject = UnityEngine.GameObject.CreatePrimitive(UnityEngine.PrimitiveType.Cube); UnityEngine.Mesh mesh = tempGameObject.GetComponent <UnityEngine.MeshFilter>().sharedMesh; tempGameObject.transform.position = capsuleCollider.bounds.center; tempGameObject.transform.rotation = transform.rotation; tempGameObject.transform.localScale = GetCapsuleScale(transform.localScale, capsuleCollider.radius, capsuleCollider.height, capsuleCollider.direction); AkSurfaceReflector.SetGeometryFromMesh(mesh, tempGameObject.transform, geometryID, INVALID_ROOM_ID, false, false, false); #if UNITY_EDITOR previousCapsuleCollider = capsuleCollider; previousPosition = tempGameObject.transform.position; previousRotation = tempGameObject.transform.rotation; previousScale = tempGameObject.transform.localScale; #endif previousColliderType = typeof(UnityEngine.CapsuleCollider); UnityEngine.GameObject.Destroy(tempGameObject); } else if (roomCollider.GetType() == typeof(UnityEngine.SphereCollider)) { geometryID = GetID(); #if UNITY_EDITOR if (previousColliderType == typeof(UnityEngine.SphereCollider) && previousPosition == roomCollider.bounds.center && previousScale == roomCollider.bounds.size) { return(geometryID); } #endif UnityEngine.GameObject tempGameObject = UnityEngine.GameObject.CreatePrimitive(UnityEngine.PrimitiveType.Sphere); UnityEngine.Mesh mesh = tempGameObject.GetComponent <UnityEngine.MeshFilter>().sharedMesh; tempGameObject.transform.position = roomCollider.bounds.center; tempGameObject.transform.localScale = roomCollider.bounds.size; AkSurfaceReflector.SetGeometryFromMesh(mesh, tempGameObject.transform, geometryID, INVALID_ROOM_ID, false, false, false); #if UNITY_EDITOR previousColliderType = typeof(UnityEngine.SphereCollider); previousPosition = tempGameObject.transform.position; previousScale = tempGameObject.transform.localScale; #endif previousColliderType = typeof(UnityEngine.SphereCollider); UnityEngine.GameObject.Destroy(tempGameObject); } else { if (previousColliderType == roomCollider.GetType()) { return(geometryID); } UnityEngine.Debug.LogWarning(name + " has an invalid collider for wet transmission. Wet Transmission will be disabled."); // in case a geometry was added with the room's ID, remove it if (previousColliderType == typeof(UnityEngine.MeshCollider) || previousColliderType == typeof(UnityEngine.BoxCollider) || previousColliderType == typeof(UnityEngine.SphereCollider) || previousColliderType == typeof(UnityEngine.CapsuleCollider)) { AkSoundEngine.RemoveGeometry(GetID()); } previousColliderType = roomCollider.GetType(); } } return(geometryID); }
public void CreateSurfaceReflector() { boxCollider = gameObject.GetComponent <BoxCollider>(); akSurfaceReflector = gameObject.GetComponent <AkSurfaceReflector>(); akGameObject = gameObject.GetComponent <AkGameObj>(); rigidBody = gameObject.GetComponent <Rigidbody>(); meshCollider = gameObject.GetComponent <MeshCollider>(); meshRenderer = gameObject.GetComponent <MeshRenderer>(); // Check if we have any components there already. if (meshCollider != null) { DestroyImmediate(meshCollider); } if (boxCollider != null) { DestroyImmediate(boxCollider); } if (akSurfaceReflector != null) { DestroyImmediate(akSurfaceReflector); } if (akGameObject != null) { DestroyImmediate(akGameObject); } if (rigidBody != null) { DestroyImmediate(rigidBody); } if (meshRenderer != null) { DestroyImmediate(meshRenderer); } // Re-add our components. boxCollider = gameObject.AddComponent <BoxCollider>(); akSurfaceReflector = gameObject.AddComponent <AkSurfaceReflector>(); akGameObject = gameObject.AddComponent <AkGameObj>(); rigidBody = gameObject.AddComponent <Rigidbody>(); // Set properties. boxCollider.isTrigger = true; akGameObject.isEnvironmentAware = true; rigidBody.mass = 1f; rigidBody.drag = 0f; rigidBody.angularDrag = 0.05f; rigidBody.useGravity = false; rigidBody.isKinematic = true; rigidBody.interpolation = 0; rigidBody.collisionDetectionMode = 0; gameObject.name = "SurfaceReflector"; // Destroy our ReflectorCreator when done. DestroyImmediate(this); }