using System.Collections;using System.Collections.Generic;using UnityEngine;publicclassAudioManager:MonoBehaviour{// Use this for initialization//单例模式 负责管理SoundManager ClipManagerpublicstaticAudioManager Instance;publicSourceManager sourceManager;publicClipManager clipManager;void Start (){
Instance =this;
sourceManager =newSourceManager(gameObject);}publicvoidPlay(string audioName){//第一步找到空闲的AudioSource;AudioSource audiosource = sourceManager.GetFreeAudio();//第二步找到相应的片段SingleClip audioclip = clipManager.FindAudioClip(audioName);//播放
audioclip.Play(audiosource);}// Update is called once per framevoid Update (){}}
using System.Collections;using System.Collections.Generic;using UnityEngine;publicclassSourceManager{//负责管理AudioSourcepublicSourceManager(GameObject outower){
ower = outower;lnitial();}
List<AudioSource> allSource;GameObject ower;//初始化listpublicvoidlnitial(){
allSource =newList<AudioSource>();//添加三个 AudioSourcefor(int i =0; i <3; i++){AudioSource temSource= ower.AddComponent<AudioSource>();
allSource.Add(temSource);}}publicAudioSourceGetFreeAudio(){for(int i =0; i < allSource.Count; i++){if(!allSource[i].isPlaying){return allSource[i];}}//如果三个AudioSource都在占用,就创建一个AudioSource temSource = ower.AddComponent<AudioSource>();
allSource.Add(temSource);return temSource;}//释放多余的AudioManagerpublicvoidReleaseFreeAudio(){int count =0;
List<AudioSource> temSources =newList<AudioSource>();for(int i =0; i < allSource.Count; i++){if(!allSource[i].isPlaying){
count++;}if(count>3){
temSources.Add(allSource[i]);}}for(int i =0; i < temSources.Count; i++){AudioSource audio = temSources[i];
allSource.Remove(audio);}
temSources.Clear();
temSources =null;}}
using System.Collections;using System.Collections.Generic;using UnityEngine;publicclassClipManager{publicClipManager(){LoadAuido();}//用来存音效名字的publicstring[] clips ={"one","twe","three"};
SingleClip[] singClip ;publicvoidLoadAuido(){
singClip =newSingleClip[clips.Length];for(int i =0; i < clips.Length; i++){AudioClip audioclips= Resources.Load<AudioClip>(clips[i]);SingleClip sings =newSingleClip(audioclips);
singClip[i]= sings;}}publicSingleClipFindAudioClip(string clipsname){int index =-1;for(int i =0; i < clips.Length; i++){if(clipsname.Equals(clips[i])){
index = i;}}if(index!=-1){return singClip[index];}returnnull;}}
参考文档AudioManagerSourceManagerClipsManager播放using System.Collections;using System.Collections.Generic;using UnityEngine;public class AudioManager : MonoBehaviour { // Use this for initialization //单例模式 负责管理SoundManager ClipManager public