using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioManager : MonoBehaviour { public static AudioManager Instance { get; private set; } private AudioSource ad; private Animator anim; private Dictionary<string,AudioClip> clipDic = new Dictionary<string,AudioClip>(); private async void Awake() { Instance = this; ad = gameObject.AddComponent<AudioSource>(); anim = gameObject.AddComponent<Animator>(); ad.volume = 0.5f; //anim.runtimeAnimatorController = await YooAssetManager.Instance.LoadAsset<RuntimeAnimatorController>("AudioManager"); DontDestroyOnLoad(gameObject); } /// <summary> /// ���ű������� /// </summary> /// <param name="audioName"></param> public async void PlayAudio(string audioName, bool loop = false) { if (ad.clip == null) { ad.clip = await YooAssetManager.Instance.LoadAsset<AudioClip>(audioName); ad.volume = 0.5f; ad.Play(); ad.loop = true; } else { Debug.Log(anim); //anim.Play("bgmdown"); StartCoroutine("PlayUp", audioName); } } /// <summary> /// ����������������� ���Ŷ�������Ƶ /// </summary> /// <param name="audioName"></param> public void PlayDirectAudio(GameObject go, string audioName, float volume = 1, bool loop = false) { AudioSource goAD; if (go.GetComponent<AudioSource>()) { goAD = go.GetComponent<AudioSource>(); } else { goAD = go.AddComponent<AudioSource>(); } goAD.spatialBlend = 0; goAD.dopplerLevel = 1; goAD.spread = 45; goAD.rolloffMode = AudioRolloffMode.Logarithmic; goAD.minDistance = 20; goAD.maxDistance = 500; goAD.volume = volume; goAD.loop = loop; goAD.clip = clipDic[audioName]; if (goAD.clip != null) goAD.Play(); } /// <summary> /// �����굱ǰAudioManager��Ƶ��� /// </summary> public void AudioFinished() { StartCoroutine("Finished", ad); } /// <summary> /// �����굱ǰ������Ƶ��� /// </summary> /// <param name="go"></param> public void AudioFinished(GameObject go) { AudioSource gAD = go.GetComponent<AudioSource>(); if (gAD) StartCoroutine("Finished", gAD); } IEnumerator Finished(AudioSource audioSource) { yield return new WaitForSeconds(audioSource.clip.length); audioSource.clip = null; Destroy(audioSource); StopCoroutine("Finished"); } /// <summary> /// �������ּ������� /// </summary> public void Mute() { //anim.Play("bgmdown"); } /// <summary> /// �������ֽ�ǿ /// </summary> public void VolumeUp() { //anim.Play("bgmup"); } /// <summary> /// ���� GameObject /// </summary> /// <param name="go"></param> public void Mute(GameObject go) { AudioSource gAD = go.GetComponent<AudioSource>(); gAD.mute = true; } /// <summary> /// �������� /// </summary> /// <param name="volume"></param> public void SetVolume(float volume) { ad.volume = volume; } }