Unity 声音播放管理模块
2017-03-10 14:25
337 查看
using System; using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Linq; public class SoundManager : MonoBehaviour { private static SoundManager main; public static SoundManager Instance { get { if (main == null) { GameObject obj = new GameObject("SoundManager"); main = obj.AddComponent<SoundManager>(); } return main; } } private List<Sound> soundList = new List<Sound>(); private float _deltaTime; void Update() { soundList.ToList().ForEach(x => { if(x.isScaleTime == false){ _deltaTime = Time.unscaledDeltaTime; } else { _deltaTime = Time.deltaTime; } x.playTime += _deltaTime; if (!x.audioSource.isPlaying && x.isFinish) { if(!(x.loop)) x.Finish(); } }); } public Sound PlayFromAssetbundle(string name,bool isScaleTime = false) { AudioClip clip = Resources.Load<AudioClip>(name); if (clip == null) clip = Resources.Load<AudioClip>("通用点击"); return PlaySound(clip, name); } public Sound PlayFromResource(string path,string name) { AudioClip clip = Resources.Load<AudioClip>(path + name); if (clip == null) clip = Resources.Load<AudioClip>("00通用点击"); return PlaySound(clip,name); } /// <summary> /// 人声 /// </summary> public Sound PlayVoice(string name) { AudioClip clip = Resources.Load<AudioClip>("Sound/Voice/zh/" + name); if (clip == null) { Debug.LogError("错误的语音:" + name); clip = Resources.Load<AudioClip>("00通用点击"); } return PlaySound(clip, name); } /// <summary> /// 场景音效 /// </summary> public Sound PlaySceneSound(string name) { AudioClip clip = Resources.Load<AudioClip>("Sound/SceneSound/" + name); if (clip == null) { Debug.LogError("错误的语音:" + name); clip = Resources.Load<AudioClip>("00通用点击"); } return PlaySound(clip, name); } /// <summary> /// 动作音效 /// </summary> public Sound PlayAnimaSound(string name) { //AudioClip clip = Resources.Load<AudioClip>("Sound/AnimaSound/" + name); //if (clip == null) //{ // Debug.LogError("错误的语音:" + name); // clip = Resources.Load<AudioClip>("00通用点击"); //} //return PlaySound(clip, name); return PlaySceneSound(name); } public Sound PlaySound(AudioClip clip,string soundName,bool isScaleTime = false) { Sound sound = new Sound(this); sound.clip = clip; sound.isScaleTime = isScaleTime; sound.name = soundName; sound.audioSource = this.gameObject.AddComponent<AudioSource>(); sound.audioSource.clip = clip; sound.audioSource.Play(); soundList.Add(sound); return sound; } public bool isPlay(string soundName) { List<Sound> sound = new List<Sound>(this.soundList.Where(s => s.name.Contains(soundName))); if(sound.Count>=1) { if (sound[0].audioSource.isPlaying) return true; } return false; } public void DestorySound(string name) { List<Sound> destoryList = SearchSound(name); destoryList.ToList().ForEach(x => x.Finish()); } public void DestorySoundByID(string ID) { List<Sound> destoryList = SearchSoundByID(ID); destoryList.ToList().ForEach(x => x.Finish()); } public void DestorySoundNoAction(string name) { List<Sound> destoryList = SearchSound(name); destoryList.ToList().ForEach(x => x.FinishNoComplete()); } public List<Sound> SearchSound(string soundName) { List<Sound> sound = new List<Sound>(this.soundList.Where(s => s.name.Contains(soundName))); return sound; } public List<Sound> SearchSoundByID(string ID) { List<Sound> sound = new List<Sound>(this.soundList.Where(s => s.ID.Equals(ID))); return sound; } public float GetClipLength(string name) { AudioClip clip = Resources.Load<AudioClip>("Sound/Voice/zh/" + name); if (clip == null) { Debug.LogError("错误的语音:" + name); clip = Resources.Load<AudioClip>("00通用点击"); } return clip.length; } public void RemoveSound(Sound sound) { Destroy(sound.audioSource); soundList.Remove(sound); sound = null; } public void PauseAllSound(){ for(int i = 0;i<soundList.Count;i++){ soundList [i].audioSource.Pause (); } } public void ResumeAllSound(){ for(int i = 0;i<soundList.Count;i++){ soundList [i].audioSource.UnPause (); } } public void ClearSound() { soundList.ToList().ForEach(x => x.FinishNoComplete()); } }
相关文章推荐
- 关于Unity中的声音管理模块(专题七)
- unity www读取本地视频文件和外部视频文件 播放视频动画和视频声音
- unity之声音播放
- unity声音的管理
- Unity 声音管理
- unity5.6新功能VideoPlayer播放声音,判断视频播放完毕,以及遇到的坑总结
- 视频管理模块代码总结 (2)flash视频播放源码
- unity声音文件播放
- unity声音文件播放
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块
- Unity播放声音的时候,音量与原大小不符的解决方案
- Android平台Unity所有声音从听筒播放
- 使用winsound模块播放声音
- python使用PyGame模块播放声音的方法
- python使用PyGame模块播放声音的方法
- Unity声音管理
- [cnblogs镜像]Unity 声音播放不受Time.scale为0的影响
- unity—NGUI播放视频及声音注意事项
- Unity 声音播放不受Time.scale为0的影响
- Unity 顺序播放声音