使用Audio Mixer分别控制音效

前言
在游戏中,通常我们需要控制整个游戏的主音量(全局音量),并且单独控制背景音乐和其他音效(攻击、爆炸之类)的音量,这时我们可以用Audio Mixer来解决。
工程中用到3个音频文件作为测试,分别为背景音乐、玩家攻击和敌人爆炸。
正文

1、新建工程导入资源

在这里插入图片描述

将3个音频文件放在Audio目录下:

2、创建音量调节面板UI

创建了3个滑动条分别控制主音量、音乐和音效,并且将滑动条的默认值设为1:

在这里插入图片描述

3、创建声音播放源

(1)背景音乐

创建一个空物体(GameObject)来作为背景音乐的载体,改名为Background Music,添加一个Audio Source组件(要使用Audio Mixer控制音量必须要用Audio Source来播放音频),将背景音乐音频文件拖到AudioClip中,勾选Loop让背景音乐循环播放:
在这里插入图片描述

(2)玩家攻击音效

创建一个空物体改名为Player,添加Audio Source组件,将玩家攻击音效拖入AudioClip,取消勾选Play On Awake:
在这里插入图片描述

并且添加了一个名为Player的脚本(脚本放在Scripts文件夹下)来模拟玩家攻击播放攻击音效,代码如
下:

 using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
     
    public class Player : MonoBehaviour
    {
     
        private AudioSource audioSource;
     
    	void Start ()
    	{
    	    audioSource = GetComponent<AudioSource>();
    	}
    	
    	void Update () {
                if (Input.GetKeyDown(KeyCode.Q))
                {
                    audioSource.Play();    // 按下Q键播放玩家攻击音效
                }
    	}
    }

(3)敌人爆炸音效
和设置Player步骤相同,只不过物体和脚本名变成了Enemy,播放按键设为E,拖入敌人爆炸音效,取消勾选Play On Awake:
在这里插入图片描述

3、创建Audio Mixer

  1. 在Audio文件夹下创建Mixers文件夹,右键点击Mixers文件夹 --> Creat --> Audio Mixer:
    在这里插入图片描述

  2. 创建后改名为MasterMixer,我们用这个Audio Mixer来控制全局音量;双击打开我们创建的MasterMixer,将打开的窗口拉出来方便我们查看:
    在这里插入图片描述

  3. 接下来我们单击选择Groups下的Master,再点击Groups右边的 + 添加成员;我们需要创建两个成员,分别命名为Music和SoundEffect:在这里插入图片描述4. 我们会发现MasterMixer下多出了几个东西
    在这里插入图片描述

  4. 我们要用Music成员来控制背景音乐,所以我们把Music成员拖到Background Music物体的Audio Source组件下的Output中:
    在这里插入图片描述

  5. 然后我们点击Mixers右边的 + ,再创建一个名为SoundEffectMixer的Audio Mixer,我们用这个Mixer而来管理玩家攻击和敌人爆炸音效,并且将这个Mixer也放到Mixers文件夹下,方便管理:
    在这里插入图片描述

  6. 然后我们选择刚创建的SoundEffectMixer,单击选择Master,点击Groups右边的 + ,创建两个成员,分别为PlayerAttack和EnemyExplosion,分别代表玩家攻击和敌人爆炸音效:
    在这里插入图片描述

  7. 我们再次单击左键选择SoundEffectMixer,拖到上面的MasterMixer,然后会弹出一个窗口,选择SoundEffect:
    在这里插入图片描述

  8. 将PlayerAttack成员拖到Player物体的Audio Source组件下的Output中;

将EnemyExplosion成员拖到Enemy物体的Audio Source组件下的Output中:
在这里插入图片描述在这里插入图片描述

  1. 我们现在看一下Mixer和成员间的层级关系:
    在这里插入图片描述

现在我们可以通过MasterMixer下的Master来控制全局主音量,通过Music来控制背景音乐音量,通过SoundEffect来控制玩家攻击和敌人爆炸音效。

4、暴露参数

我们需要先将Master、Music和SoundEffect的参数暴露(Expose)出来,这样我们才可以通过代码去控制音量:

  1. 首先暴露出Master的参数:
    在这里插入图片描述

  2. 然后点击Exposed Parameters,选择我们刚暴露出来的Master的参数,按下F2更改名字为MasterVolume:
    在这里插入图片描述

  3. 对Music和SoundEffect进行同样的操作(1,2步操作),然后我们就有3个暴露出来的参数:
    在这里插入图片描述

5、控制音量

现在我们有了参数就可以让我们控制音量了,那么接下来就进行音量的控制:

  1. 在Menu Canvas(也可以新建一个空物体,随意)下新建一个脚本名为AudioManager,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
 
public class AudioManager : MonoBehaviour
{
 
    public AudioMixer audioMixer;    // 进行控制的Mixer变量
 
    public void SetMasterVolume(float volume)    // 控制主音量的函数
    {
        audioMixer.SetFloat("MasterVolume", volume);
        // MasterVolume为我们暴露出来的Master的参数
    }
 
    public void SetMusicVolume(float volume)    // 控制背景音乐音量的函数
    {
        audioMixer.SetFloat("MusicVolume", volume);
        // MusicVolume为我们暴露出来的Music的参数
    }
 
    public void SetSoundEffectVolume(float volume)    // 控制音效音量的函数
    {
        audioMixer.SetFloat("SoundEffectVolume", volume);
        // SoundEffectVolume为我们暴露出来的SoundEffect的参数
    }
}
  1. 将MasterMixer拖到AudioManager脚本上:
    在这里插入图片描述

  2. 然后我们将3个滑动条分别绑定这3个函数:
    在这里插入图片描述在这里插入图片描述

  3. 将3个滑动条都绑定号函数后,我们就可以通过滑动条来分别控制Master、Music和SoundEffect的值了:
    在这里插入图片描述

  4. 但是现在滑动条只能让参数的值在1和0间变化,声音大小没有变化,所以我们需要修改滑动条的最小值和最大值来解决;
    在这里插入图片描述

我们先要测试下声音的大小区间,点击Edit in Play Mode,拖动滑动块,找出声音最小和最大的值:

  1. 然后我们修改滑动条的最小值和最大值:
    在这里插入图片描述

  2. 全部滑动条都调整好了之后我们就可以正常调节音量的大小了;
    在这里插入图片描述

(1)主音量控制全局音量(包括了背景音乐和音效)

(2)音乐控制背景音乐

(3)音效控制玩家攻击和敌人爆炸音效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值