【Unity】BGMとSE(効果音)を同時に鳴らす方法

BGMが途切れることなく、効果音を鳴らす方法について考えます。

チュートリアル

準備する素材

サウンド音源を2つ用意します。
BGM(ループできるのが望ましい)
SE (効果音で、クリック音や爆発音)

オブジェクトの配置

サンプルのオブジェクト配置を確認してください。

GameObject(空のゲームオブジェクト)

Hierarchyウィンドウで、右クリックしてCreate Emptyを選択して作成します。

AudioSourceコンポーネント

GameObjectにAudioSourceコンポーネントを2つ追加します。
BGM再生ようとSE再生用にします。

それぞれの音源(AudioClip)をアウトレット接続しておきます。(Projectウィンドウからドラッグ&ドロップ)
BGMは、Play On AwakeとLoopにチェックを入れておきます。

スクリプト

AudioPlay.cs

スペースキーを押すとSEがなるようにしておきます。

using UnityEngine;

public class AudioPlay : MonoBehaviour
{
    [SerializeField]
    AudioSource seAudioSource;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            seAudioSource.Play();
        }
    }
}

SE再生用のAudioSourceをAudioPlayスクリプトのSeAudioSourceフィールドにアウトレット接続します。

実行

実行してみて、SEが鳴ったときには、BGMの音量が下がるのを確認します。

(応用)SEを鳴らしている時は、BGMの音量を下げたい

SEやボイスを再生している時、BGMの音量を下げて聞き取りやすくしたい場合の対応になります。

使う機能

UnityのAudio Mixerを使います。

Audio Mixerの作成

Projectウィンドウで右クリック、Create -> Audio Mixerを選択。
名前をMixerとしておきます。

Audio MixerにBGMとSEを登録

作成したAudioMixerをダブルクリックします。

次の手順で順番に登録します。

  1. Groupsの右にある「+」記号をクリックします。
  2. ②ができるので名前をBGMとします。
  3. Groupsの下のMasterをクリックします。
  4. ③ができるので名前をSEとします。

ダッキング(Ducking)他の音が鳴った時、音量を下げる機能を追加

BGMを選択して下部の Add…をクリックします。

Duck Volumeを選択します。

同様にSEを選択して、右下のAdd…をクリック、Sendを選択します。

SEを選択、インスペクターでReceiveに「BGM-Duck Volume」を選択します。

Send levelが表示されるようになりますので、0dBに変更しておきます。

再度、BGMをクリックしてインスペクターのThresholdの値を-40に変更します。

AudioSourceコンポーネントの出力先をMixerにします。

  1. GemeObjectを選択して、AudioSourceのOutputにMixerのBGMを登録します

同様にSE向けのAudioSourceコンポーネントにSE(Mixer)を登録します。

実行

実行してみて、SEが鳴ったときには、BGMの音量が下がるのを確認します。

調整

次の画面を表示〔BGMを選択している状態のインスペクター)しながら再生すると、リアルタイムで確認ができますので、
次のような値を調整して期待するサウンドを作っていきましょう。
値を変更すると、グラフも変更されますので視覚的に調整ができます。

Threshold:閾値
Ratio:閾値を超えてからの減衰率
Attack Time:閾値を超えてから反応するまでの時間

参考

Audio,Unity

Posted by hidepon