/// <summary> /// Doesn't seem to work for eventInstances for some reason. /// </summary> /// <param name="eventInstance"></param> /// <param name="minDistance"></param> /// <param name="maxDistance"></param> public static void Set3DAttenuationSettings(FMOD.Studio.EventInstance eventInstance, float minDistance, float maxDistance) { //Stop minDistance from being greater than maxDistance and vice versa. minDistance = Mathf.Clamp(minDistance, 0, maxDistance); maxDistance = Mathf.Max(minDistance, maxDistance); //Set values. eventInstance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, minDistance); eventInstance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, maxDistance); }
public void StartSpotAmbience(int initialInsideStatus) { if (!IsInitialized) { return; } if (!InstanceAlreadyPlaying) { spotAmbienceInstance = FMODUnity.RuntimeManager.CreateInstance(spotAmbience); if (spotAmbienceInstance.isValid()) { FMODUnity.RuntimeManager.AttachInstanceToGameObject(spotAmbienceInstance, gameObject.transform, rb); spotAmbienceInstance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, adjustMaxDistance); if (spatialAudioRoomAware && SpatialAudioManager.Instance != null) { SpatialAudioManager.Instance.RegisterRoomAwareInstance(spotAmbienceInstance, gameObject.transform, adjustMaxDistance, initialRoom); } spotAmbienceInstance.setVolume(initialInsideStatus); FMOD.RESULT result = spotAmbienceInstance.start(); if (result == FMOD.RESULT.OK) { InstanceAlreadyPlaying = true; } } } }
public void PlayInstance() { if (!instance.isValid()) { instance.clearHandle(); } // Let previous oneshot instances play out if (isOneshot && instance.isValid()) { instance.release(); instance.clearHandle(); } bool is3D; eventDescription.is3D(out is3D); if (!instance.isValid()) { eventDescription.createInstance(out instance); // Only want to update if we need to set 3D attributes if (is3D) { var transform = GetComponent <Transform>(); #if UNITY_PHYSICS_EXIST if (GetComponent <Rigidbody>()) { Rigidbody rigidBody = GetComponent <Rigidbody>(); instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody); } else #endif #if UNITY_PHYSICS2D_EXIST if (GetComponent <Rigidbody2D>()) { var rigidBody2D = GetComponent <Rigidbody2D>(); instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody2D); } else #endif { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject)); RuntimeManager.AttachInstanceToGameObject(instance, transform); } } } foreach (var param in Params) { instance.setParameterByID(param.ID, param.Value); } foreach (var cachedParam in cachedParams) { instance.setParameterByID(cachedParam.ID, cachedParam.Value); } if (is3D && OverrideAttenuation) { instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, OverrideMinDistance); instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, OverrideMaxDistance); } instance.start(); hasTriggered = true; }
public void Play() { if (TriggerOnce && hasTriggered) { return; } if (String.IsNullOrEmpty(Event)) { return; } if (!eventDescription.isValid()) { Lookup(); } if (!Event.StartsWith(SnapshotString, StringComparison.CurrentCultureIgnoreCase)) { eventDescription.isOneshot(out isOneshot); } bool is3D; eventDescription.is3D(out is3D); if (!instance.isValid()) { instance.clearHandle(); } // Let previous oneshot instances play out if (isOneshot && instance.isValid()) { instance.release(); instance.clearHandle(); } if (!instance.isValid()) { eventDescription.createInstance(out instance); // Only want to update if we need to set 3D attributes if (is3D) { var rigidBody = GetComponent <Rigidbody>(); var rigidBody2D = GetComponent <Rigidbody2D>(); var transform = GetComponent <Transform>(); if (rigidBody) { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody); } else { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody2D); } } } foreach (var param in Params) { instance.setParameterValue(param.Name, param.Value); } if (is3D && OverrideAttenuation) { instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, OverrideMinDistance); instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, OverrideMaxDistance); } instance.start(); hasTriggered = true; }
public void Play(string audioFile) { if (String.IsNullOrEmpty(audioFile)) { return; } if (TriggerOnce && hasTriggered) { return; } if (String.IsNullOrEmpty(Event)) { return; } if (!eventDescription.isValid()) { Lookup(); } bool isOneshot = false; if (!Event.StartsWith("snapshot", StringComparison.CurrentCultureIgnoreCase)) { eventDescription.isSnapshot(out isOneshot); } bool is3D = false; eventDescription.is3D(out is3D); if (!instance.isValid()) { instance.clearHandle(); } if (isOneshot && instance.isValid()) { instance.release(); instance.clearHandle(); } if (!instance.isValid()) { eventDescription.createInstance(out instance); if (is3D) { var rigidBody = GetComponent <Rigidbody>(); var rigidBody2D = GetComponent <Rigidbody2D>(); var transform = GetComponent <Transform>(); if (rigidBody) { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody); } else { instance.set3DAttributes(RuntimeUtils.To3DAttributes(gameObject, rigidBody2D)); RuntimeManager.AttachInstanceToGameObject(instance, transform, rigidBody2D); } } } foreach (var param in Params) { instance.setParameterValue(param.Name, param.Value); } if (is3D && OverrideAttenuation) { instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MINIMUM_DISTANCE, OverrideMinDistance); instance.setProperty(FMOD.Studio.EVENT_PROPERTY.MAXIMUM_DISTANCE, OverrideMaxDistance); } ExtensionsManager.PlayProgrammerSound(audioFile, this.instance); hasTriggered = true; }