using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlaySound : MonoBehaviour { [SerializeField] AudioSource _audioSource; [SerializeField] AudioClip _audioClip; #region Public Access [HideInInspector] public AudioSource audioSource; #endregion [Tooltip("Check loopClip if you want the clip to loop")] public bool LoopClip; [HideInInspector] public bool ClipStopped; private bool ClipPlayed; private void Awake() { audioSource = _audioSource; } private void OnTriggerEnter(Collider col) { if (col.gameObject.tag == "Player" && !ClipPlayed) { if (!LoopClip) //if it's not a loop clip: { PlayThisSound(_audioClip); } else //If it's a loop clip: { StartCoroutine(PlayClipLoop()); } } } private void OnTriggerExit(Collider col) { if (col.gameObject.tag == "Player") { ClipPlayed = true; } } IEnumerator PlayClipLoop() { while (!ClipStopped) { if (!_audioSource.isPlaying) { PlayThisSound(_audioClip); } yield return null; } } public void PlayThisSound(AudioClip audioClip) { _audioSource.PlayOneShot(audioClip); } public void PlayThisSoundLooped() { StartCoroutine(PlayClipLoop()); } }