Unity实现通用的项目音频管理器

本文介绍了如何在Unity中创建并使用一个通用的音频管理器。通过在项目中设置_AudioManager对象,分配AudioManager.cs脚本,并将音效剪辑拖拽到相应参数,结合音频监听和音频源组件,可以实现高效便捷的音频控制。
摘要由CSDN通过智能技术生成

一、音频管理器脚本如下:

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

二、该“音频管理器”脚本的使用方法

①在项目的层级视图中新建一个空对象"_AudioManager" 

②把AudioManager.cs脚本赋值给空对象“_AudioManager”

③拖拽视图中的音效剪辑文件到对应的参数列表中,

④在项目中添加“音频监听(Audio Listener)”与3个“音频源(Audio Sources)”组件即可

 

注意:本内容来自《Unity3D/2D游戏开发从0到1》的第24章内容

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值