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 clipDic = new Dictionary(); private async void Awake() { Instance = this; ad = gameObject.AddComponent(); anim = gameObject.AddComponent(); ad.volume = 0.5f; //anim.runtimeAnimatorController = await YooAssetManager.Instance.LoadAsset("AudioManager"); DontDestroyOnLoad(gameObject); } /// /// 播放背景音乐 /// /// public async void PlayAudio(string audioName, bool loop = false) { if (ad.clip == null) { ad.clip = await YooAssetManager.Instance.LoadAsset(audioName); ad.volume = 0.5f; ad.Play(); ad.loop = true; } else { Debug.Log(anim); //anim.Play("bgmdown"); StartCoroutine("PlayUp", audioName); } } /// /// 给物体增加声音组件 播放独立的音频 /// /// public void PlayDirectAudio(GameObject go, string audioName, float volume = 1, bool loop = false) { AudioSource goAD; if (go.GetComponent()) { goAD = go.GetComponent(); } else { goAD = go.AddComponent(); } 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(); } /// /// 播放完当前AudioManager音频清空 /// public void AudioFinished() { StartCoroutine("Finished", ad); } /// /// 播放完当前物体音频清空 /// /// public void AudioFinished(GameObject go) { AudioSource gAD = go.GetComponent(); if (gAD) StartCoroutine("Finished", gAD); } IEnumerator Finished(AudioSource audioSource) { yield return new WaitForSeconds(audioSource.clip.length); audioSource.clip = null; Destroy(audioSource); StopCoroutine("Finished"); } /// /// 背景音乐减弱到无 /// public void Mute() { //anim.Play("bgmdown"); } /// /// 背景音乐渐强 /// public void VolumeUp() { //anim.Play("bgmup"); } /// /// 静音 GameObject /// /// public void Mute(GameObject go) { AudioSource gAD = go.GetComponent(); gAD.mute = true; } /// /// 设置音量 /// /// public void SetVolume(float volume) { ad.volume = volume; } }