/// <summary> /// Plays audio for an AudioInteractionResult. /// </summary> /// <param name="interactionResult">The interaction result to use data from.</param> /// <param name="point">The world position to play the audio at.</param> /// <param name="priority">The priority of the sound. Audio sources with a priority less than this will be "stolen" and used to play this audio.</param> /// <returns>The ImpactAudioSource that will be used to play the audio. Will be null if no audio sources are available.</returns> public static ImpactAudioSourceBase PlayAudio(AudioInteractionResult interactionResult, Vector3 point, int priority) { if (interactionResult.AudioSourceTemplate == null) { return(null); } ImpactAudioPool pool = poolGroup.GetOrCreatePool(interactionResult.AudioSourceTemplate, interactionResult.AudioSourceTemplate.PoolSize); if (pool != null) { ImpactAudioSourceBase a = pool.GetObject(); //If all objects are in use, try to get one with a lower priority if (a == null) { a = pool.GetObject((p) => p.Priority < priority); } if (a != null) { a.PlayAudio(interactionResult, point, priority); } return(a); } return(null); }
/// <summary> /// Plays audio for the given audio interaction result. /// </summary> /// <param name="interactionResult">The result to get the audio clip, volume, and pitch from.</param> /// <param name="point">The point to play the audio at.</param> /// <param name="priority">The priority of the interaction.</param> public override void PlayAudio(AudioInteractionResult interactionResult, Vector3 point, int priority) { transform.position = point; _audioSource.loop = interactionResult.LoopAudio; _audioSource.clip = interactionResult.AudioClip; _audioSource.volume = baseVolume * interactionResult.Volume; _audioSource.pitch = basePitch * interactionResult.Pitch; _audioSource.Play(); this.priority = priority; }
/// <summary> /// Updates this result to adjust the volume and pitch and updates the audio source position. /// </summary> /// <param name="newResult">The new result that will be used to get the new volume and pitch.</param> public void KeepAlive(IInteractionResult newResult) { if (audioSource == null) { return; } AudioInteractionResult audioInteractionResult = newResult as AudioInteractionResult; targetVolume = audioInteractionResult.Volume; targetPitch = Interaction.UpdatePitch(Pitch, audioInteractionResult.OriginalData.Velocity); audioSource.transform.position = audioInteractionResult.OriginalData.Point; }
/// <summary> /// Plays audio for the given audio interaction result. /// </summary> /// <param name="interactionResult">The result to get the audio clip, volume, and pitch from.</param> /// <param name="point">The point to play the audio at.</param> /// <param name="priority">The priority of the interaction.</param> public abstract void PlayAudio(AudioInteractionResult interactionResult, Vector3 point, int priority);