音频管理器 ,Dictionary字典的用法

Unity音频管理
本文介绍了一个用于Unity项目的音频管理类,该类通过字典统一管理大量的音频剪辑文件,并提供了播放背景音乐和音效的方法。

  Dictionary字典的用法

public AudioClip[] AudioClipArray; 

private static Dictionary<string, AudioClip> _DicAudioClipLib;      

void Awake() {

     _DicAudioClipLib = new Dictionary<string, AudioClip>();
        foreach (AudioClip audioClip in AudioClipArray){
            _DicAudioClipLib.Add(audioClip.name,audioClip);
        }

   使用方法1在空提上挂上脚本,建立一个监听,3个audiosouce,关闭摄像机监听。添加音频

  /***

 * 
 *    Title:    "生化危机" 项目
 *              音频封装类。(程序重构)
 *    Description: 
 *              作用:项目中大量应用音频剪辑文件时候,进行统一管理。
 *
 *    Author:    LiuGuozhu
 *    Date:      2015
 *    Version:   1.0
 *    Modify recoder:
 */
using UnityEngine;
using System.Collections;
using System.Collections.Generic;                                    //泛型集合命名空间


public class AudioManager : MonoBehaviour {
    public AudioClip[] AudioClipArray;                               //剪辑数组
    public static float AudioBackgroundVolumns = 1F;                 //背景音量
    public static float AudioEffectVolumns = 1F;                     //音效音量


    private static Dictionary<string, AudioClip> _DicAudioClipLib;   //音频库
    private static AudioSource[] _AudioSourceArray;                  //音频源数组
    private static AudioSource _AudioSource_BackgroundAudio;         //背景音乐
    private static AudioSource _AudioSource_AudioEffectA;            //音效源A
    private 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=this.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;
        }
}//Start_end


    /// <summary>
    /// 播放背景音乐
    /// </summary>
    /// <param name="audioClip">音频剪辑</param>
    public static void PlayBackground(AudioClip audioClip){
        //防止背景音乐的重复播放。
        if (_AudioSource_BackgroundAudio.clip == audioClip){
            return;
        }
        //处理全局背景音乐音量
        _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns;
        if (audioClip){
            _AudioSource_BackgroundAudio.clip = audioClip;
            _AudioSource_BackgroundAudio.Play();
        }else{
            Debug.LogWarning("[AudioManager.cs/PlayBackground()] audioClip==null !");
        }
    }


    //播放背景音乐
    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>
    private static void PlayAudioEffectA(AudioClip audioClip){
        //处理全局音效音量
        _AudioSource_AudioEffectA.volume = AudioEffectVolumns;


        if (audioClip){
            _AudioSource_AudioEffectA.clip = audioClip;
            _AudioSource_AudioEffectA.Play();
        }
        else{
            Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] audioClip==null ! Please Check! ");
        }
    }


    /// <summary>
    /// 播放音效_音频源B
    /// </summary>
    /// <param name="audioClip">音频剪辑</param>
    private static void PlayAudioEffectB(AudioClip audioClip){
        //处理全局音效音量
        _AudioSource_AudioEffectB.volume = AudioEffectVolumns;


        if (audioClip){
            _AudioSource_AudioEffectB.clip = audioClip;
            _AudioSource_AudioEffectB.Play();
        }
        else{
            Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] 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="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>
    /// 改变背景音乐音量
    /// </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);
    }
}//Class_end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值