
MusicManager.cs
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;public class MusicManager : BaseManager<MusicManager>{//背景音乐private AudioSource bkMusic = null;private float bkValue = 1;//音效private GameObject soundObj = null;private List<AudioSource> soundList = new List<AudioSource>();private float soundValue = 1;public MusicManager(){MonoManager.GetInstance().AddUpdateListener(Update);// 循环删除播放完的音效}/// <summary>/// 循环删除播放完的音效/// </summary>private void Update(){for(int i = soundList.Count - 1; i >= 0; --i){if (!soundList[i].isPlaying){GameObject.Destroy(soundList[i]);soundList.RemoveAt(i);}}}/// <summary>/// 背景音乐 开始/// </summary>/// <param name="name"></param>public void PlayBackMusic(string name){if (bkMusic == null){GameObject obj = new GameObject();obj.name = "bkMusic";bkMusic = obj.AddComponent<AudioSource>();}ResourcesManager.GetInstance().LoadAsync<AudioClip>("Music/BackMusic/" + name, (clip) => {bkMusic.clip = clip;bkMusic.loop = true;//循环bkMusic.volume = bkValue;bkMusic.Play();});}/// <summary>/// 背景音乐 调整/// </summary>/// <param name="name"></param>public void ChangeBackMusic(float v){bkValue = v;if (bkMusic == null)return;bkMusic.volume = bkValue;}/// <summary>/// 背景音乐 暂停/// </summary>/// <param name="name"></param>public void PauseBackMusic(string name){if (bkMusic == null)return;bkMusic.Pause();}/// <summary>/// 背景音乐 停止/// </summary>/// <param name="name"></param>public void StopBackMusic(string name){if (bkMusic == null)return;bkMusic.Stop();}/// <summary>/// 音效 开始/// </summary>/// <param name="name"></param>/// <param name="isLoop"></param>/// <param name="callBack"></param>public void PlaySound(string name,bool isLoop,UnityAction<AudioSource> callBack = null){if (soundObj == null){GameObject obj = new GameObject();obj.name = "soundObj";}//加载资源,加载、加Componen、循环、音量、播放、加列表ResourcesManager.GetInstance().LoadAsync<AudioClip>("Music/Sound/" + name, (clip) => {AudioSource source = soundObj.AddComponent<AudioSource>();source.clip = clip;source.loop = isLoop;source.volume = soundValue;source.Play();soundList.Add(source);if (callBack != null)callBack(source);});}/// <summary>/// 音效 调整音量/// </summary>/// <param name="v"></param>public void ChangeSound(float v){soundValue = v;for(int i=0; i<soundList.Count; ++i)soundList[i].volume = soundValue;}/// <summary>/// 音效 停止/// </summary>/// <param name="source"></param>public void StopSound(AudioSource source){if (soundList.Contains(source)){soundList.Remove(source);source.Stop();GameObject.Destroy(source);}}}