Unity - AudioManager 给背景音乐、音效添加统一的音量管理

今天给自己测试项目添加音效(音效找了好N,免费的甚少,基本收费,对于我们开发测试项目实属不便,找了几个免费的将就着用)。

音量控制类型

游戏里的设置都会有:

  • 整体音量
  • 背景音乐音量
  • 游戏音效音量

的三种音量控制。

Unity的音效系统我也没接触过,那就边学边用吧。

百度找了一篇讲解得不错得实用教程:Unity AudioMixer 之 Mixer使用及统一管理音量

我也就按里面得方式来实现得。

需要用到得组件、类

  • AudioMixer
  • AudioSource

组件作用:

AudioMixer

AudioMixer创建资源,Project视图->右键->Create->Audio Mixer,如下图:
在这里插入图片描述

它得作用,你可以理解就时音源播放前得混合处理器,里面可以给Group添加各种Sound Effect(我没去一个一个测试,但我知道Pitch可以控制播放音源得频率,可以加快、或时减慢,从而实现降调、与升调得效果,一般汽车引擎声,可以根据速度来控制pitch实现引擎声得降调、升调效果音)

这里我就不全部说明作用,对Group重点说吧(我刚刚才用,也不熟悉):

  • 先打开AudioMixer得窗口,可以从菜单栏->Window->Audio->AudioMixer,或时Ctrl + 8快捷键打开
  • 选择Project视图下得AudioMixer资源,然后AudioMixer窗口将会显示该AudioMixer的编辑信息

如下图:
在这里插入图片描述

左边信息中,有个Group,就是我们关注的,Group就是分组的意思。
而AudioSource有个outputAudioMixerGroup,正式这个Group。

默认会有一个叫:Master的Group,不能删,也不能重命名的。
在这里插入图片描述

在Group栏的右上角有个"+"号,添加可以添加想要的分组。
然后命名号Group的名称,我添加了:BGM, EFF,两个,分别用于控制背景音乐、游戏音效的两个分组Group,如下图:
在这里插入图片描述

然后我们先选中BGM的分组,如下:
在这里插入图片描述

这时Inspector视图会显示该分组的各个属性,里面有一个叫:“Attenuation”(衰减)栏下,有个叫"Volume"(音量)的数据Slider控件(滑动条控件),如下图
在这里插入图片描述

我们鼠标右键对准这个"Volume"的标签,右键,在弹出的菜单中选择"Expose’Volume(of BGM)’ to script"(将BGM的Volume属性暴露给脚本的意思),同样的方法,我们将:Master、EFF的分组的Volume都暴露一下。
在这里插入图片描述

这时再回到"AudioMixer"窗口
在这里插入图片描述

发现右上角显示:"Exposed Parameters (3)“的选项,点击一下,会列出各个暴露出来的Volume,再右键对着你想要重命名的选项,选"Rename”,分别该未MASTER_Volume, BGM_Volume, EFF_Volume。
在这里插入图片描述

重点的音量设置:

这三个属性,可以在脚本(C#)中通过:AudioMixer.SetFloat(“BGM_Volume”, float);来设置值即可,float的音量范围是:-80.0f~20.0f

AudioSource

前面我们对AudioMixer有所了解了,AudioSource是对AudioClip播放得一个组件
所以我们在让AudioSource播放前,要设置好他的:AudioClip属性(就是Project中的各种:mp3,wav,ogg,等音频文件)。

这样就可以播放了。

我们这里重点时关注音量,所以AudioSource还有一个属行要重点设置一下:AudioMixerGroup,在Inspector中,叫:Output,如下图:
在这里插入图片描述

该AudioSource的Output属性,还是和之前说明一样,就是AudioSource在输出音频数据前,可以通过Output,处理一下,再输出,这个Output就是AudioMixerGroup(就是我们在AudioMixer窗口中给Group添加的分组)

在脚本中叫:outputAudioMixerGroup,及:AudioSource类中得:outputAudioMixerGroup。

该对象我们可以通过在:AudioMixer.FindMatchingGroups(“BGM”)[0];的API来获取我们在AudioMixer窗口下编辑添加的"BGM"Group分组。

通过下面代码就可以对一个AudioSource.outputAudioMixerGroup设置

AudioSource.outputAudioMixerGroup = AudioMixer.FindMatchingGroups("YourGroupName")[0]; // YourGroupName就是你的分组名称

这样AudioSource.Play()时就会应用上AudioMixer的Attenuation的Volume音量设置。(当然AudioSource本身也有Volume设置的,但那时针对某个文件的特殊处理,我们这里了解统一设置就好了)

好了,上面讲到了AudioMixer的Group如何设置Volume,并暴露API给AudioSource,在脚本中统一处理音量,下面我们看看完整的代码吧。

Code

using Unity.Collections;
using UnityEngine;
using UnityEngine.Audio;

/// <summary>
/// author      :   jave.lin
/// date        :   2020.02.15
/// 音效管理
/// </summary>
public class GlobalAudioManager : MonoBehaviour
{
    private static GlobalAudioManager instance;
    public static GlobalAudioManager Instance() => instance;
    [Header("背景音乐与音效的混合器")]
    public AudioMixer Mixer;
    [Header("当前正在播放的BGM")]
    [SerializeField] [ReadOnly] private AudioSource playing_BGM;

    [Header("Testing")] 
    [SerializeField] [Range(-80f, 20f)] private float master_volume = -10;
    [SerializeField] [Range(-80f, 20f)] private float bgm_volume = -10;
    [SerializeField] [Range(-80f, 20f)] private float eff_volume = -10;

    private void Awake()
    {
        if (instance != null) Debug.LogError($"{GetType().Name} instance already exsit.");
        instance = this;
        DontDestroyOnLoad(this);
    }

    private void Start()
    {
        PlayBGM(GetComponent<AudioSource>()); // 测试用
    }
    // 这里做测试用,我就放到update中实时更新,正式使用可以在设置的UI面板中的音量的滑动条改动时再设置就好了
    private void Update()
    {
        SetMASTER_Volume(master_volume);
        SetBGM_Volume(bgm_volume);
        SetEFF_Volume(eff_volume);
    }
    // 重播BGM
    public void RestartBGM()
    {
        if (playing_BGM != null)
        {
            playing_BGM.time = 0;
        }
    }
    // 播放BGM
    public void PlayBGM(AudioSource bgm)
    {
        if (playing_BGM != null) playing_BGM.Stop();
        playing_BGM = bgm;
        playing_BGM.outputAudioMixerGroup = Mixer.FindMatchingGroups("BGM")[0];
        playing_BGM.Play();
    }
    // 播放EFF
    public void PlayEff(AudioSource eff)
    {
        eff.outputAudioMixerGroup = Mixer.FindMatchingGroups("EFF")[0];
        eff.Play();
    }
    // 获取MASTER音量
    public float GetMASTER_Volume()
    {
        Mixer.GetFloat("MASTER_Volume", out float value);
        return value;
    }
    // 设置MASTER音量
    public void SetMASTER_Volume(float value)
    {
        Mixer.SetFloat("MASTER_Volume", Mathf.Clamp(value, -80, 20));
    }
    // 获取BGM音量
    public float GetBGM_Volume()
    {
        Mixer.GetFloat("BGM_Volume", out float value);
        return value;
    }
    // 设置BGM音量
    public void SetBGM_Volume(float value)
    {
        Mixer.SetFloat("BGM_Volume", Mathf.Clamp(value, -80, 20));
    }
    // 获取EFF音量
    public float GetEFF_Volume()
    {
        Mixer.GetFloat("EFF_Volume", out float value);
        return value;
    }
    // 设置EFF音量
    public void SetEFF_Volume(float value)
    {
        Mixer.SetFloat("EFF_Volume", Mathf.Clamp(value, -80, 20));
    }
}

最后运行,我们就可以在Inspector中,测试统一的整体音量、背景音乐音量、游戏音效音量,三个属性统一管理了
在这里插入图片描述

References

### 回答1: Unity AudioManager是一个Unity引擎中的音频管理器,它可以帮助开发者轻松管理游戏中的音频资源,包括音效背景音乐等。通过Unity AudioManager,开发者可以实现音频的播放、暂停、停止、淡入淡出等功能,同时还可以控制音量、音调等参数。这个工具可以帮助开发者更好地控制游戏的音频效果,提高游戏的用户体验。 ### 回答2: Unity AudioManager是一款适用于UNITY游戏引擎的音频管理器插件,可以方便地管理游戏中的音频资源,包括声音、音效、音乐等。 其中,音效播放是AudioManager最主要的功能。通过AudioManager,游戏开发者可以在游戏中添加多个音效资源,进行播放和停止等操作。在开发游戏时,我们可以选择在特定的场景或对象中添加声音,在角色移动、攻击、被攻击等场景触发音效,增强游戏的实时性和触感。 除了音效AudioManager还具有播放背景音乐的能力。在游戏中添加背景音乐可以增加游戏的氛围感,使玩家更容易沉浸在游戏场景之中。通过AudioManager,我们可以更加方便的管理和切换不同的背景音乐,让玩家在感受游戏氛围的同时,不会感到单调。 另外,AudioManager还提供了音量控制功能,让开发者可以在游戏不同场景下,通过设置音量实现动态的背景音乐音效的表现。同时,AudioManager支持预加载音频资源,减少了读取资源的时间,提高了游戏的运行效率。 综上所述,Unity AudioManager是一款非常实用的音频管理器,无论是在游戏音效背景音乐音量调节、预加载资源等方面都具有很大的作用,为开发者节约了大量的时间和精力,并为玩家打造了更加优质的游戏体验。 ### 回答3: Unity AudioManager是一个内置的音频引擎,可帮助Unity开发者管理和控制其游戏中的音频效果。该工具可以帮助你轻松地在Unity添加、编辑和管理各种音频资源,如音效背景音乐和语音。 Unity AudioManager可以帮助你管理音频的各个方面。它可以管理音量、音调、3D音效、混响和回声等音频效果。你可以使用Unity的Inspector窗口来设置每个音频剪辑的音频属性,或使用代码来动态地修改这些属性。 除了管理音频资源之外,Unity AudioManager还可以管理游戏音频的播放。你可以使用它来预加载音频资源、淡入淡出、循环播放、停止播放和暂停播放等。 Unity AudioManager还可以使用时间轴来管理音频剪辑。通过在时间轴上拖动和缩放音频剪辑,你可以精确地控制音频的播放时间和速度,以及在游戏中触发特定的音频效果。 总之,Unity AudioManagerUnity的一个非常实用的工具,它可以帮助你轻松地管理和控制游戏中的音频效果,从而提高游戏的质量和用户体验。如果你是一个Unity开发者,并且希望从一开始就设计出一个充满音乐和声音的游戏,那么Unity AudioManager将是一个非常有用的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值