Exemple #1
0
 public static void UnregisterReflector(AkSurfaceReflector reflector)
 {
     if (m_Instance != null)
     {
         m_Instance.m_Reflectors.Remove(reflector);
         m_Instance.m_ReflectorsToUpdate.Remove(reflector);
     }
 }
Exemple #2
0
    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");
        }
Exemple #4
0
 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);
                    }
                }
            }
        }
Exemple #6
0
    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);
    }