using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/* 功能:用来对项目中的所有音频做同一的管理*  * 描述:*      、挂载该脚本的游戏物体上要挂载三个AudioSouce[可以修改脚本,动态挂]*      、建议大的背景音乐不要加入AudioClip[],对内存消耗大。而是哪里用到,单独使用PlayBackground函数播放*      、小的音效片段可以将其加入AudioClip[] 中,可以很方便的管理,可以通过声音剪辑、声音剪辑名称来进行音乐的播放*      、该声音管理可以进行背景音乐的播放、音效的播放、背景音乐的音调改变、音效的音调改变、停止播放*      */
public class AudioManager : MonoBehaviour
{public AudioClip[] AudioClipArray;                               //剪辑数组public static float AudioBackgroundVolumns = 1F;                 //背景音量public static float AudioEffectVolumns = 1F;                     //音效音量public static float AudioBackgroundPitch = 1f;                   //背景音乐的音调public static float AudioEffectPitch = 1.0f;                     //音效的音调private static Dictionary<string, AudioClip> _DicAudioClipLib;   //音频库,将声音名字和声音资源进行关联private static AudioSource[] _AudioSourceArray;                  //音频源数组private static AudioSource _AudioSource_BackgroundAudio;         //背景音乐private static AudioSource _AudioSource_AudioEffectA;            //音效源Aprivate static AudioSource _AudioSource_AudioEffectB;            //音效源B//......可以按需求进行添加/// <summary>/// 音效库资源加载/// </summary>void Awake(){//音频库加载[初始化,将音乐剪辑和名字联系起来]_DicAudioClipLib = new Dictionary<string, AudioClip>();foreach (AudioClip audioClip in AudioClipArray){_DicAudioClipLib.Add(audioClip.name, audioClip);}//处理音频源,也就是得到用来播放声音的音乐播放器_AudioSourceArray = GetComponents<AudioSource>();_AudioSource_BackgroundAudio = _AudioSourceArray[0];               //其中一个用来播放背景音乐_AudioSource_AudioEffectA = _AudioSourceArray[1];                  //其中一个用来播放音乐_AudioSource_AudioEffectB = _AudioSourceArray[2];//从数据持久化中得到音量数值if (PlayerPrefs.GetFloat("AudioBackgroundVolumns") >= 0){AudioBackgroundVolumns = PlayerPrefs.GetFloat("AudioBackgroundVolumns");_AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns;}if (PlayerPrefs.GetFloat("AudioEffectVolumns") >= 0){AudioEffectVolumns = PlayerPrefs.GetFloat("AudioEffectVolumns");_AudioSource_AudioEffectA.volume = AudioEffectVolumns;_AudioSource_AudioEffectB.volume = AudioEffectVolumns;}//设置音乐的音效if (PlayerPrefs.HasKey("AudioBackgroundPitch")){AudioBackgroundPitch = PlayerPrefs.GetFloat("AudioBackgroundPitch");}if (PlayerPrefs.HasKey("AudioEffectPitch")){AudioEffectPitch = PlayerPrefs.GetFloat("AudioEffectPitch");}_AudioSource_BackgroundAudio.pitch = AudioBackgroundPitch;_AudioSource_AudioEffectA.pitch = AudioEffectPitch;_AudioSource_AudioEffectB.pitch = AudioEffectPitch;}/// <summary>/// 播放背景音乐/// 传入的参数是背景音乐的AudioClip/// </summary>/// <param name="audioClip">音频剪辑</param>public static void PlayBackground(AudioClip audioClip){//防止背景音乐的重复播放。if (_AudioSource_BackgroundAudio.clip == audioClip){return;}//处理全局背景音乐音量_AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns;_AudioSource_BackgroundAudio.pitch = AudioBackgroundPitch;if (audioClip){_AudioSource_BackgroundAudio.loop = true;                      //背景音乐是循环播放的_AudioSource_BackgroundAudio.clip = audioClip;_AudioSource_BackgroundAudio.Play();}else{Debug.LogWarning("[AudioManager.cs/PlayBackground()] audioClip==null !");}}/// <summary>/// 播放背景音乐/// 传入的参数是声音片段的名字,要注意,其声音片段要加入声音数组中/// </summary>/// <param name="strAudioName"></param>public static void PlayBackground(string strAudioName){if (!string.IsNullOrEmpty(strAudioName)){PlayBackground(_DicAudioClipLib[strAudioName]);}else{Debug.LogWarning("[AudioManager.cs/PlayBackground()] strAudioName==null !");}}/// <summary>/// 播放音效_音频源A/// </summary>/// <param name="audioClip">音频剪辑</param>public static void PlayAudioEffectA(AudioClip audioClip){//处理全局音效音量_AudioSource_AudioEffectA.volume = AudioEffectVolumns;_AudioSource_AudioEffectA.pitch = AudioEffectPitch;if (audioClip){_AudioSource_AudioEffectA.clip = audioClip;_AudioSource_AudioEffectA.Play();}else{Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] audioClip==null ! Please Check! ");}}/// <summary>/// 播放音效_音频源A/// </summary>/// <param name="strAudioEffctName">音效名称</param>public static void PlayAudioEffectA(string strAudioEffctName){if (!string.IsNullOrEmpty(strAudioEffctName)){PlayAudioEffectA(_DicAudioClipLib[strAudioEffctName]);}else{Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] strAudioEffctName==null ! Please Check! ");}}/// <summary>/// 播放音效_音频源B/// </summary>/// <param name="audioClip">音频剪辑</param>public static void PlayAudioEffectB(AudioClip audioClip){//处理全局音效音量_AudioSource_AudioEffectB.volume = AudioEffectVolumns;_AudioSource_AudioEffectB.pitch = AudioEffectPitch;if (audioClip){_AudioSource_AudioEffectB.clip = audioClip;_AudioSource_AudioEffectB.Play();}else{Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] audioClip==null ! Please Check! ");}}/// <summary>/// 播放音效_音频源B/// </summary>/// <param name="strAudioEffctName">音效名称</param>public static void PlayAudioEffectB(string strAudioEffctName){if (!string.IsNullOrEmpty(strAudioEffctName)){PlayAudioEffectB(_DicAudioClipLib[strAudioEffctName]);}else{Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] strAudioEffctName==null ! Please Check! ");}}/// <summary>/// 停止播放音效A/// </summary>public static void StopPlayAudioEffectA(){_AudioSource_AudioEffectA.Stop();}/// <summary>/// 停止播放音效B/// </summary>public static void StopPlayAudioEffectB(){_AudioSource_AudioEffectB.Stop();}/// <summary>/// 停止播放背景音乐/// </summary>public static void StopPlayAudioBackGround(){_AudioSource_BackgroundAudio.Stop();}/// <summary>/// 改变背景音乐音量/// </summary>/// <param name="floAudioBGVolumns"></param>public static void SetAudioBackgroundVolumns(float floAudioBGVolumns){_AudioSource_BackgroundAudio.volume = floAudioBGVolumns;AudioBackgroundVolumns = floAudioBGVolumns;//数据持久化PlayerPrefs.SetFloat("AudioBackgroundVolumns", floAudioBGVolumns);}/// <summary>/// 改变音效音量/// </summary>/// <param name="floAudioEffectVolumns"></param>public static void SetAudioEffectVolumns(float floAudioEffectVolumns){_AudioSource_AudioEffectA.volume = floAudioEffectVolumns;_AudioSource_AudioEffectB.volume = floAudioEffectVolumns;AudioEffectVolumns = floAudioEffectVolumns;//数据持久化PlayerPrefs.SetFloat("AudioEffectVolumns", floAudioEffectVolumns);}
}

unity音效管理器实现(二)之美相关推荐

  1. unity音效管理器

    unity游戏制作时,经常需要播放音效,如果没有一个音效管理类,随时随地都可以播放音乐,不利于代码的管理.我们可以将所有关于音效集中到一个管理类当中,可以将这个音效管理器写成单例,也可以将它当作一个模 ...

  2. Unity 音效管理器编辑窗口的创建和Manager的创建

    一.音效管理器面板的创建 1.首先要继承EditorWindow,然后再静态方法里创建窗口编辑器. [MenuItem("Manager/AudioManager")] stati ...

  3. 【Unity植物大战僵尸】音效管理器开发(二十四)

    42.音效管理器开发 导入资源 整理一下GameManager.cs,因为这个脚本要在两个场景中都共用,所以需要把CurrLV相关的移植到LVManager.cs中去,这里就不显示了,说下如何共用,首 ...

  4. U3D客户端框架之 音效管理器 与 Fmod介绍安装导入Unity

    一.Fmod介绍与安装导入Unity 1.Fmod与Unity内置Audio播放器对比 Unity内置的Audio底层使用的是FMOD,但是功能不够齐全,高级一点的功能如混合(Mix)等无法使用: 音 ...

  5. CocosCreator 音效管理器

    代码都有注释不再赘述 import { _decorator, Node, AudioClip, AudioSource, game, find } from "cc"; impo ...

  6. OneAlive--游戏音效管理器

    /* 游戏音效管理器* 功能:管理游戏中音效的播放和声音的调节* audioSourceBG是背景(2D)音乐,挂在相机上即可* gamesound是游戏音效(3D)挂在人物角色身上*/using S ...

  7. Unity 项目中的音效管理器

    using UnityEngine; using System.Collections; using System.Collections.Generic;/// <summary> // ...

  8. 内存管理器(二)边界标识法

    边界标识算法 前言 首先说明,我们这里的内存管理器主要是以模拟各种内存分配算法为主,从内存申请一片内存然后根据我们所选定的数据结构和算法,实现程序的堆空间的分配,至于内存分配详情我们会在Linux内核 ...

  9. APEX包管理器简述(二)

    上一篇概括介绍了Apex包管理器的整体,本篇主要讲一下Boot阶段Apex包的安装过程,上篇文章说到onStart过程最后会安装所有需要安装的Apex包,主要使用了scanStagedSessions ...

最新文章

  1. DeepMind激起千层浪的这篇论文,并非无所不能
  2. 外观模式(Facade)
  3. linux系统挂载(卸载)U盘(文件系统)
  4. 丑憨批的爬虫笔记1(导学+requests))
  5. Sphinx+MySQL5.1x+SphinxSE+mmseg
  6. 《spring-boot学习》-02-hello world
  7. Java SE (5)之 线程使用
  8. Oracle 相关知识点结构图
  9. PHP-文件下载功能总结
  10. 微信小程序开发教程!
  11. WinTel联盟发展史
  12. 【5G核心网】free5GC UE安全鉴权流程源码分析
  13. nginx代理安装ssl证书
  14. 关于显示器显示效果的调节(色温,6轴)
  15. 一分钟解决 The server selected protocol version TLS10 is not accepted 问题
  16. animate.css的使用
  17. 使用动态规划算法需要满足的必要条件:优化原则
  18. CorelDRAW2022订阅版本最新更新内容
  19. ym——Android从零开始(27)(山寨版微信-上)(新)
  20. 仿微信悬浮通知栏/横幅通知

热门文章

  1. [洛谷]P3594 [POI2015]WIL-Wilcze doły (#单调队列)
  2. 计算机闹铃音乐是什么歌,计算器金亿利闹铃都是什么歌
  3. 【马蜂窝 加速乐cookie】一次坑爹的获取html源代码不到之路
  4. 强力卸载office2003
  5. wms仓库管理系统的入库模块
  6. 学习3D视觉,圈子很重要!
  7. 年度绩效考核系统(一)
  8. 微信帐号开发:sae bae微信上墙|微信墙完美版(php源码,lidc虚拟主机源码(idc虚拟主机源码)...
  9. 杂谈随感-10:常见的招聘平台
  10. 新华字典java_基于JAVA的新华字典接口调用代码实例