using Invector; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio; using Lean.Pool; namespace Beyond { public class TriggerSoundByEvent : MonoBehaviour { public GameObject audioSource; public AudioMixerGroup audioMixerGroup; public List sounds; [Header("Trigger Delay")] public float triggerTime; private vFisherYatesRandom _random; public void TriggerSound() { if (sounds.Count == 0) { return; } StartCoroutine(TriggerSoundDelay(triggerTime)); } #if UNITY_EDITOR private void Awake() { testAudio = false; } [SerializeField, Header("Debug, for testing audio")] private bool testAudio; private void Update() { if (testAudio) { testAudio = false; TriggerSound(); } } #endif private IEnumerator TriggerSoundDelay(float delay) { yield return new WaitForSeconds(delay); if (_random == null) _random = new vFisherYatesRandom(); GameObject audioObject = null; if (audioSource != null) { audioObject = LeanPool.Spawn(audioSource.gameObject, transform.position, Quaternion.identity); } else { Debug.Log("Cant pool object"); } if (audioObject != null) { var source = audioObject.gameObject.GetComponent(); var clip = sounds[_random.Next(sounds.Count)]; if (audioMixerGroup != null) { source.outputAudioMixerGroup = audioMixerGroup; } var destroy = audioObject.GetComponent(); if (destroy) { destroy.delay = clip.length; } else { destroy = audioObject.AddComponent(); destroy.delay = clip.length; } source.clip = clip; //to see in inspector; source.PlayOneShot(clip); } } } }