1、分为三大类:背景音、音效、对话音
2、将所有声音放到某文件目录下,本文以Resources为例
3、原理是三大类声音中的每个都有对应的AudioSources组件,当本类内切换声音时会自动停止上一个声音片段的播放。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace Util
{public enum AudioType { bgm, effect, speek }public class AudioPlayer : MonoBehaviour{public static string SpeechStart = "SpeechStart";public static string SpeechEnd = "SpeechEnd";public  AudioSource bgm;public  AudioSource effect;public  AudioSource speek;private Coroutine speechCoroutine = null;public AudioClip[] sounds;public bool speechIsPlaying = true;private void Awake(){bgm = gameObject.AddComponent<AudioSource>();bgm.loop = true;bgm.volume = 0.2f;effect = gameObject.AddComponent<AudioSource>();effect.loop = false;speek = gameObject.AddComponent<AudioSource>();speek.loop = false;speek.volume = MainVarController.Instance.startSpeekVolum;//sounds = new List<AudioClip>();sounds= Resources.LoadAll<AudioClip>("AudioClips"); //  PlayAudio(AudioType.bgm, 16);   //-------------播放背景音乐}private void OnEnable(){ManagerEvent.Register(SpeechEnd, SpeechEndHandler); }private void OnDisable(){ManagerEvent.Unregister(SpeechEnd, SpeechEndHandler);}private void SpeechEndHandler(params object[] args){speechIsPlaying = false;//Debug.LogError("speechIsPlaying222   " + speechIsPlaying);}public void PlayAudio(AudioType type, int index){//Debug.LogError("speechIsPlaying---   " + type + "  ======   " + index);switch (type){case AudioType.bgm:case AudioType.effect:AudioClip clip = GetSound(index);AudioSource source = GetAudioSource(type);if (clip != null && source != null){if (source.isPlaying && source.clip.name.Equals(clip.name)){return;}source.clip = clip;source.Play();}break;case AudioType.speek:StopSpeech();speechIsPlaying = true;//Debug.LogError("speechIsPlaying000   " + speechIsPlaying);StopAllCoroutines();speechCoroutine = StartCoroutine(SpeechPlay(index));break;}}/// <summary>/// 音效类声音播放/// </summary>/// <param name="index">音频资源 序号</param>/// <param name="audioSpace">空间设置(2d:0 , 3d:1 , 其他为混合音效)</param>public void EffectPlay(int index, float audioSpace){PlayAudio(AudioType.effect,index);effect.spatialBlend = audioSpace;}public IEnumerator SpeechPlay(int index, System.Action onPlayFinish = null){speechIsPlaying = true;AudioClip clip = GetSound(index);AudioSource source = GetAudioSource(AudioType.speek);if (clip != null && source != null){source.clip = clip;source.Play();ManagerEvent.Send(SpeechStart, index);while (source.isPlaying){yield return null;}StopSpeech();if (onPlayFinish != null)onPlayFinish();//Debug.LogError("speechIsPlaying111   " + speechIsPlaying);ManagerEvent.Send(SpeechEnd, index);}}public void StopSpeech(){if (speechCoroutine != null){AudioSource source = GetAudioSource(AudioType.speek);source.Stop();StopCoroutine(speechCoroutine);speechCoroutine = null;}}public void StopAudio(AudioType type){switch (type){case AudioType.bgm:case AudioType.effect:AudioSource source = GetAudioSource(type);if (source != null){source.Stop();}break;case AudioType.speek:StopSpeech();break;}}private AudioSource GetAudioSource(AudioType type){switch (type){case AudioType.bgm: return bgm;case AudioType.effect: return effect;case AudioType.speek: return speek;}return null;}private AudioClip GetSound(int index){AudioClip clip = null;if (sounds != null && sounds.Length - 1 >= index && index >= 0){return sounds[index];}return clip;}}
}

4、使用方法:控制播放某种声音的某个声音片段时,调用函数PlayAudio(声音种类,声音资源序号(Resources中加载的声音列表)),如PlayAudio(AudioType.bgm, 1)

Unity 声音播放控制相关推荐

  1. Unity 声音播放控制:Audio Mixer

    Unity播放声音时一般会使用AudioSource和AudioListener控制声音的播放,暂停和大小.在场景中AudioListener只能存在一个,当控制所有的声音都是一样的设置时只需要调用A ...

  2. Unity 声音播放方法 —— Audio Sound 的使用

    声音播放方法 -- Audio Sound 的使用 Unity中支持的音频格式 Unity 中播放声音简单案例 代码控制声音播放 Unity中支持的音频格式 格式 用途 AIFF 适用于较短的音乐文件 ...

  3. unity声音文件播放

    Unity3D一共支持4种格式的文件 .AIFF  .WAV :适用于较短的音乐,可用作音效 .MP3  .OGG:适用于较长的音乐,可用作背景音乐 第一种方法:可以通过添加AudioSource组件 ...

  4. Flash课件控制声音播放三法

    在众多的多媒体课件制作软件中,Flash以其完善的媒体支持功能.功能强大的交互程序设计能力.强劲的兼容性和广阔的发展空间,深受众多老师们的喜爱.在Flash课件中,为了增强教学效果,更好地表达教学内容 ...

  5. 基于PWM控制的声音播放的实现

    1.应用背景 在现在的电子产品中,客户往往有些对声音提示或者音效反馈的需求,因此需要我们提供能发声的产品方案.现在也有些专门的语音处理芯片,可以由单片机直接控制语音播放,需要播放的声音就直接预先固化在 ...

  6. Unity 音乐播放全局类

    Unity 音乐播放全局类 今天晚了LOL, 发现里面的声音系统做得很不错,于是最近就写了一份反正以后也用的到,2D音乐全局播放. 项目跟PoolManager对象池插件结合了. 解决的问题: 1. ...

  7. Unity全局音量控制以及音量信息存储在本地

    Unity全局音量控制以及音量信息存储在本地 一个简单的全局音量控制功能,主要实现进入游戏音量同步以前的设置,点击设置弹出设置窗口,点击小喇叭禁用\开启音量,移动滑动条调节音量大小. 一.进入游戏时设 ...

  8. Unity Time.timeScale控制播放声音放慢

    unity声音一般是不跟Time.timeScale进行变化 AudioSource pitch 倍速播放 默认=1可以减慢和加快 而且这个可以在播放中或者播放前设置,都会生效 例如杀死有些怪物有爆炸 ...

  9. qemu声卡模拟原理-声音播放(pa+ac97)

    连载目录 1.qemu声卡模拟 2.qemu声卡模拟原理-声卡初始化(pa+ac97) 3.qemu声卡模拟原理-声音播放(pa+ac97) PCM数据 PCM数据格式这里抛砖引玉贴一点别人写的: P ...

最新文章

  1. PTA团体程序设计天梯赛-L2-024 部落
  2. 树莓派应用实例6:测量土壤湿度(改进WEB发布)
  3. 计算机学院迎新晚会集宁,迎新晚会 | 信息管理学院2017年“海姆达尔之眼”迎新晚会圆满成功...
  4. shiro学习(19): 拦截器
  5. Ubuntu16.04 安装有道词典
  6. 摆花(2012Noip普及组第3题)
  7. ubuntu 14.04 64bit 安装 oracle 11g r2
  8. c语言程序设计pdf下载上海交大,C语言程序设计第1章参考标准答案(上海交大出版社).doc...
  9. pcl求平面法向量_PCL自动求解平面法向量参数化表示
  10. 51单片机智能小车——超声波
  11. python爬虫-代理池的维护
  12. Nginx负载均衡配置实例详解(转发学习)留给未来需要的自己
  13. 如何批量把下载QQ空间相册图片
  14. hdu 3786 找出直系亲属 (DFS)
  15. LeetCode(626):换座位 Exchange Seats(SQL)
  16. 【win32】Helloworld
  17. Arduino、AB相增量式光电编码器测位移和速度方向
  18. 第六章 第一节 文本控件
  19. 全球与中国冷凝器扩管器市场深度研究分析报告
  20. Halcon-图像锐化(边缘处理)

热门文章

  1. 炒股亏损是什么原因?
  2. iView Table 前端分页
  3. 有计算机绘制函数结题报告,信息技术应用用计算机绘制函数图象
  4. 基于51单片机的无线防盗报警器
  5. 香港目前紧缺18类人才!你是他们需要的人才吗?
  6. 【Excel】批量提取超链接中的链接地址
  7. C++随记之模板(黑马程序员学习笔记)
  8. Oracle Java Stored Procedure调用Unix shell
  9. matlab读取igs文件,Matlab 等間隔讀取IGS對流層天頂延遲(ZPD)文件
  10. matlab创建圆点标定板,Halcon学习(十八)如何制作标定板