[Unity 3D] 使用Audio Mixer分别控制主音量、背景音乐和其他音效
前言
在游戲中,通常我們需要控制整個(gè)游戲的主音量(全局音量),并且單獨(dú)控制背景音樂和其他音效(攻擊、爆炸之類)的音量,這時(shí)我們可以用Audio Mixer來解決。
如果文章中有哪些地方寫的不對(duì), 歡迎指出。
?
提醒
在這篇教程中我將重新創(chuàng)建一個(gè)簡單的工程來給大家演示,并且我當(dāng)前使用的Unity版本為2018.1.1f1。
本文并非零基礎(chǔ)教程,但是寫了有點(diǎn)太詳細(xì),且有大約30張圖,所以又臭又長...
工程中用到3個(gè)音頻文件作為測(cè)試,分別為背景音樂、玩家攻擊和敵人爆炸。
?
正文
1、新建工程導(dǎo)入資源
將3個(gè)音頻文件放在Audio目錄下:
?
2、創(chuàng)建音量調(diào)節(jié)面板UI
?創(chuàng)建了3個(gè)滑動(dòng)條分別控制主音量、音樂和音效,并且將滑動(dòng)條的默認(rèn)值設(shè)為1:
?
3、創(chuàng)建聲音播放源
(1)背景音樂
創(chuàng)建一個(gè)空物體(GameObject)來作為背景音樂的載體,改名為Background Music,添加一個(gè)Audio Source組件(要使用Audio Mixer控制音量必須要用Audio Source來播放音頻),將背景音樂音頻文件拖到AudioClip中,勾選Loop讓背景音樂循環(huán)播放:
(2)玩家攻擊音效
創(chuàng)建一個(gè)空物體改名為Player,添加Audio Source組件,將玩家攻擊音效拖入AudioClip,取消勾選Play On Awake:
?并且添加了一個(gè)名為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)敵人爆炸音效
和設(shè)置Player步驟相同,只不過物體和腳本名變成了Enemy,播放按鍵設(shè)為E,拖入敵人爆炸音效,取消勾選Play On Awake:
?
3、創(chuàng)建Audio Mixer
1. 在Audio文件夾下創(chuàng)建Mixers文件夾,右鍵點(diǎn)擊Mixers文件夾 --> Creat --> Audio Mixer:
2. 創(chuàng)建后改名為MasterMixer,我們用這個(gè)Audio Mixer來控制全局音量;雙擊打開我們創(chuàng)建的MasterMixer,將打開的窗口拉出來方便我們查看:
3. 接下來我們單擊選擇Groups下的Master,再點(diǎn)擊Groups右邊的 + 添加成員;我們需要?jiǎng)?chuàng)建兩個(gè)成員,分別命名為Music和SoundEffect:
4. 我們會(huì)發(fā)現(xiàn)MasterMixer下多出了幾個(gè)東西
5. 我們要用Music成員來控制背景音樂,所以我們把Music成員拖到Background Music物體的Audio Source組件下的Output中:
6. 然后我們點(diǎn)擊Mixers右邊的 + ,再創(chuàng)建一個(gè)名為SoundEffectMixer的Audio Mixer,我們用這個(gè)Mixer而來管理玩家攻擊和敵人爆炸音效,并且將這個(gè)Mixer也放到Mixers文件夾下,方便管理:
7. 然后我們選擇剛創(chuàng)建的SoundEffectMixer,單擊選擇Master,點(diǎn)擊Groups右邊的 + ,創(chuàng)建兩個(gè)成員,分別為PlayerAttack和EnemyExplosion,分別代表玩家攻擊和敵人爆炸音效:
8. 我們?cè)俅螁螕糇箧I選擇SoundEffectMixer,拖到上面的MasterMixer,然后會(huì)彈出一個(gè)窗口,選擇SoundEffect:
9. 將PlayerAttack成員拖到Player物體的Audio Source組件下的Output中;
將EnemyExplosion成員拖到Enemy物體的Audio Source組件下的Output中:
10. 我們現(xiàn)在看一下Mixer和成員間的層級(jí)關(guān)系:
現(xiàn)在我們可以通過MasterMixer下的Master來控制全局主音量,通過Music來控制背景音樂音量,通過SoundEffect來控制玩家攻擊和敵人爆炸音效。
?
4、暴露參數(shù)
我們需要先將Master、Music和SoundEffect的參數(shù)暴露(Expose)出來,這樣我們才可以通過代碼去控制音量:
1. 首先暴露出Master的參數(shù):
2. 然后點(diǎn)擊Exposed Parameters,選擇我們剛暴露出來的Master的參數(shù),按下F2更改名字為MasterVolume:
3. 對(duì)Music和SoundEffect進(jìn)行同樣的操作(1,2步操作),然后我們就有3個(gè)暴露出來的參數(shù):
?
5、控制音量
現(xiàn)在我們有了參數(shù)就可以讓我們控制音量了,那么接下來就進(jìn)行音量的控制:
1. 在Menu Canvas(也可以新建一個(gè)空物體,隨意)下新建一個(gè)腳本名為AudioManager,代碼如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Audio;public class AudioManager : MonoBehaviour {public AudioMixer audioMixer; // 進(jìn)行控制的Mixer變量public void SetMasterVolume(float volume) // 控制主音量的函數(shù){audioMixer.SetFloat("MasterVolume", volume);// MasterVolume為我們暴露出來的Master的參數(shù)}public void SetMusicVolume(float volume) // 控制背景音樂音量的函數(shù){audioMixer.SetFloat("MusicVolume", volume);// MusicVolume為我們暴露出來的Music的參數(shù)}public void SetSoundEffectVolume(float volume) // 控制音效音量的函數(shù){audioMixer.SetFloat("SoundEffectVolume", volume);// SoundEffectVolume為我們暴露出來的SoundEffect的參數(shù)} }2. 將MasterMixer拖到AudioManager腳本上:
3. 然后我們將3個(gè)滑動(dòng)條分別綁定這3個(gè)函數(shù):
4. 將3個(gè)滑動(dòng)條都綁定號(hào)函數(shù)后,我們就可以通過滑動(dòng)條來分別控制Master、Music和SoundEffect的值了:
5.?但是現(xiàn)在滑動(dòng)條只能讓參數(shù)的值在1和0間變化,聲音大小沒有變化,所以我們需要修改滑動(dòng)條的最小值和最大值來解決;
我們先要測(cè)試下聲音的大小區(qū)間,點(diǎn)擊Edit in Play Mode,拖動(dòng)滑動(dòng)塊,找出聲音最小和最大的值:
6. 然后我們修改滑動(dòng)條的最小值和最大值:
7. 全部滑動(dòng)條都調(diào)整好了之后我們就可以正常調(diào)節(jié)音量的大小了;
(1)主音量控制全局音量(包括了背景音樂和音效)
(2)音樂控制背景音樂
(3)音效控制玩家攻擊和敵人爆炸音效
?
4、結(jié)束語
完結(jié)撒花,累死我了...
總結(jié)
以上是生活随笔為你收集整理的[Unity 3D] 使用Audio Mixer分别控制主音量、背景音乐和其他音效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人网盘行业洞察:5G改变个人网盘行业的
- 下一篇: 数字集成电路--通用设计规则+实例