オーディオミキサーを使って、BGMや足音をまとめてクロスフェードさせてみました。
オーディオミキサーを作る
まず、Window > Audio > Audio Mixerでオーディオミキサーウィンドウを開きます。
オーディオミキサーウィンドウでは、Mixersに今あるオーディオミキサーが表示されています。+ボタンから新しいオーディオミキサーを作れます。
作った直後や、ダブルクリックから名前を変えられます。
グループを作る
オーディオミキサーを選択すると、それに含まれるスナップショットやグループ、ビューのリストが表示されます。Groupsの+ボタンからグループを新規作成すると、マスターの子グループが作られます。
新しいグループを選択した状態で再度+ボタンを押すと、このグループの子グループが新規作成されます。
このグループをマスターにドラッグアンドドロップすると、マスターの子グループになります。
これで、新しい2つのグループは互いに独立しますが、マスターの音量を変えると、2つの子グループの音量を同時に変えられます。
オーディオミキサーを通して音を鳴らす
シーンにあるオーディオソースからの音をオーディオミキサーに出力するには、オーディオソースのOutputで出力先のグループを選択します。
まずFPSキャラの足音をグループ1に設定しました。
グループ1には、もう一つBGM用のオーディオソースからも出力します。
さらにもう一つBGM用のオブジェクトを作って、グループ2に出力します。
これで、グループ1の音量を変えると、足音と1つ目のBGMの音量だけが変わり、グループ2の音量を変えると2つ目のBGMの音量だけが変わります。
スナップショットを作成
オーディオソースの状態はスナップショットに保存できます。オーディオミキサーやグループと同様に、スナップショットも+ボタンから新規作成できます。
名前を変えたら、スナップショット1を選択した状態で、グループ2の音量を一番下まで下げます。
スナップショット2を選択すると、はじめの状態に戻ります。
スナップショット2ではグループ2の音量は変えずに、グループ1の音量を下げてみます。
再度スナップショット1を選択すると、スナップショット2を選択する前の状態に切り替わりました。このように簡単にオーディオミキサーの状態をスナップショットに保存できます。
クロスフェードさせる
クロスフェードさせるには、片方のスナップショットの状態からもう片方の状態へとスムーズに遷移させます。それは、AudioMixer.TransitionToSnapshotsメソッドを使うと、スクリプトで簡単に行なえます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
public class CrossFadeTest : MonoBehaviour
{
[SerializeField] AudioMixer mixer;
[SerializeField] AudioMixerSnapshot[] snapshots;
float[] weights = new float[2];
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetKeyDown(KeyCode.Alpha1))
{
weights[0] = 1f;
weights[1] = 0f;
mixer.TransitionToSnapshots(snapshots, weights, 3f);
}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{
weights[0] = 0f;
weights[1] = 1f;
mixer.TransitionToSnapshots(snapshots, weights, 3f);
}
}
}
第一引数にはスナップショットの配列、第二引数には、各スナップショットのウェイトの配列、第三引数にはそのウェイトに達する時間を渡します。
ウェイトに0と1を使って、どちらか一方のスナップショットの状態にしていますが、中間の値を使ってブレンドさせることもできます。
オーディオミキサー等をスクリプトにアタッチするときは、欄の横のマークから選択します。
これで簡単にクロスフェードさせられました。
複数の音をまとめて音量を変えられるので便利です。