unity混音
前言
在游戲中,通常我們需要控制整個游戲的主音量(全局音量),并且單獨控制背景音樂和其他音效(攻擊、爆炸之類)的音量,這時我們可以用Audio Mixer來解決。
如果文章中有哪些地方寫的不對, 歡迎指出。
?
提醒
在這篇教程中我將重新創建一個簡單的工程來給大家演示,并且我當前使用的Unity版本為2018.1.1f1。
本文并非零基礎教程,但是寫了有點太詳細,且有大約30張圖,所以又臭又長...
工程中用到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下多出了幾個東西
?
5. 我們要用Music成員來控制背景音樂,所以我們把Music成員拖到Background Music物體的Audio Source組件下的Output中:
?
6. 然后我們點擊Mixers右邊的 + ,再創建一個名為SoundEffectMixer的Audio Mixer,我們用這個Mixer而來管理玩家攻擊和敵人爆炸音效,并且將這個Mixer也放到Mixers文件夾下,方便管理:
?
7. 然后我們選擇剛創建的SoundEffectMixer,單擊選擇Master,點擊Groups右邊的 + ,創建兩個成員,分別為PlayerAttack和EnemyExplosion,分別代表玩家攻擊和敵人爆炸音效:
?
8. 我們再次單擊左鍵選擇SoundEffectMixer,拖到上面的MasterMixer,然后會彈出一個窗口,選擇SoundEffect:
?
9. 將PlayerAttack成員拖到Player物體的Audio Source組件下的Output中;
將EnemyExplosion成員拖到Enemy物體的Audio Source組件下的Output中:
?
?
10. 我們現在看一下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的參數
}
}
2. 將MasterMixer拖到AudioManager腳本上:
?
3. 然后我們將3個滑動條分別綁定這3個函數:
?
?
4. 將3個滑動條都綁定號函數后,我們就可以通過滑動條來分別控制Master、Music和SoundEffect的值了:
5.?但是現在滑動條只能讓參數的值在1和0間變化,聲音大小沒有變化,所以我們需要修改滑動條的最小值和最大值來解決;
我們先要測試下聲音的大小區間,點擊Edit in Play Mode,拖動滑動塊,找出聲音最小和最大的值:
?
6. 然后我們修改滑動條的最小值和最大值:
?
7. 全部滑動條都調整好了之后我們就可以正常調節音量的大小了;
(1)主音量控制全局音量(包括了背景音樂和音效)
(2)音樂控制背景音樂
(3)音效控制玩家攻擊和敵人爆炸音效
?
?
4、結束語
完結撒花,累死我了...
————————————————
原文鏈接:https://blog.csdn.net/iFasWind/article/details/81182579
轉載于:https://www.cnblogs.com/xiaoahui/p/11553769.html
總結
- 上一篇: 浅析拯救小矮人的 nlogn 算法及其证
- 下一篇: 依赖注入Bean属性——手动装配Bean