【Unity】AudioMixerでスナップショットを使う

Audio Mixerでは、遷移(設定されたサウンドへの移行)を実装することができます

用語について

スナップショット

AudioMixerスナップショットは、オーディオミキサーの特定の設定を保存した状態です。例えば音量、エフェクトの適用具合、ピッチなどのパラメータを含むことができます。ゲーム内で異なるシーンや状況への移行時に、スナップショットを切り替えることでオーディオの雰囲気を瞬時に変更できます。トランジションオプションを使えば、これらのスナップショット間での移行をスムーズかつ自然にでき、例えば戦闘シーンへの入り口で音楽を強調するなどの演出が可能になります。スナップショット機能は、ゲームデザイナーやオーディオエンジニアが、プレイヤー体験を向上させるために重要なツールです。

トランジション

スナップショット間のトランジションとは、UnityのAudioMixerにおいて、ある音響設定(スナップショット)から別の設定に滑らかに遷移するプロセスのことを指します。これにより、ゲーム内で環境が変わる際(例えば、屋内から屋外への移動、または通常の状態から戦闘状態への変化など)に、オーディオの状態を自然に変更することができます。

スナップショットは特定のオーディオミキサーの設定を保存したもので、例えば音量、ピッチ、エコーなどのパラメータを含むことができます。ゲームプレイ中にこれらのスナップショットを切り替えることで、プレイヤーに対してより没入感のあるオーディオ体験を提供することができます。

トランジションの種類には、リニア(直線的な変更)、スムーズステップ(滑らかな変化で中間が速くなる)、スクエア(急速に変更が行われる)、ルート(徐々に速度が上がる)などがあり、これらはスナップショットの切り替え方やそれがどれだけ速く行われるかを制御します。これにより、例えば音量を徐々に上げる、あるいは急に変化させるなど、望むオーディオの変化を実現できます。

AudioMixerでスナップショット間のトランジションの切り替え方は、基本的に以下の手順に従います:

  1. スナップショットの準備: スナップショットはAudioMixerの特定の設定を保存したもので、ゲーム内の異なるオーディオ環境を表します。まずは、各シーンや状況に合わせたスナップショットを作成します。
  2. スナップショットの選択: スナップショット間のトランジションを行うには、最初に遷移の元となるスナップショットと、目的のスナップショットを選択する必要があります。
  3. トランジションの設定: スナップショットが選択されたら、トランジションの種類を設定します。これにはリニア、スムーズステップ、スクエアド、ルートなどのオプションがあり、それぞれ異なる遷移効果を提供します。
  4. トランジションの適用: ゲームイベントや特定のアクションが発生した際にスクリプトを通じてトランジションをトリガーします。例えば、プレイヤーが新しいエリアに入った時にスナップショットを切り替えることができます。
  5. トランジションのテスト: 実際にゲームをプレイしてトランジションが期待通りに動作するかをテストします。プレイモード中にAudioMixerを開き、トランジションをリアルタイムで調整することも可能です。

トランジションをスクリプトから制御するには、AudioMixerクラスのTransitionToSnapshotsメソッドを使用するか、またはSetFloatメソッドを使って特定のパラメータ(例えばVolume)をスムーズに変更することで実現できます。

スナップショットとトランジションの組み合わせは、ゲーム内でオーディオが自然に感じられるような環境を作り出すのに非常に有効なツールです。

スナップショット移行される時の遷移方法の選択

次のキャプチャーはグループに登録した音源をインスペクターで表示したものです
説明にあるように遷移時の状態を選択することができます

AudioMixerで「Volume」のスライダーを右クリックした際に表示されるメニューのオプションを以下に説明します:

AudioMixerのスナップショット間での音量変化(トランジション)の動き方を選択しています。Unityでは、これらのトランジションタイプを選ぶことで、スナップショット間の変更時にオーディオがどのように遷移するかを制御することができます。

選択できる遷移方法は以下の通りです:

  • Expose 'Volume (of SE)’ to script: これにより、「Volume」パラメータがスクリプトでアクセス可能になり、ランタイム中に動的に調整できるようになります。
  • Linear Snapshot Transition: 遷移が線形、つまり一定の速度で行われます。
  • Smoothstep Snapshot Transition: 遷移がスムーズステップ、始まりと終わりがゆっくりで中間が速いカーブを描きます。
  • Squared Snapshot Transition: 遷移がスクエアドで、開始時はゆっくり、終わりにかけて速くなります。
  • SquareRoot Snapshot Transition: 遷移がスクエアルートで、開始時は速く、終わりにかけてゆっくりになります。
  • BrickwallStart Snapshot Transition: 遷移が始まりに壁のように急激に変化し、その後徐々に線形に減少します。
  • BrickwallEnd Snapshot Transition: 遷移が線形に増加し始め、終わりにかけて壁のように急激に最大値に達します。
  • Attenuation Snapshot Transition: 減衰の度合いに応じてスナップショット遷移を制御します。

これらの選択肢は、ゲームのイベントやシーンの変更に合わせてオーディオがどのように遷移するかを細かく設定するために役立ちます。たとえば、プレイヤーが戦闘状態に入ると音楽が強くなるような状況、または環境音が静かになるなど、オーディオ体験を向上させるための重要なツールです。

これらのオプションは、オーディオミキシング時のフェーダーの動きやスナップショットの適用方法を細かく制御するために使われます。例えば、異なるゲームシーンやイベントでスムーズなオーディオの遷移を実現したり、特定のエフェクトを動的に調整したりする場合に便利です。

Expose 'Volume (of SE)’ to scriptのサンプルコード

AudioMixer内の特定のパラメータをスクリプトからアクセス可能にするために「Expose to script」オプションを使用します。例えば、スクリプトからAudioMixerの特定の音量(この例ではSEグループの音量)を制御するには、まずその音量パラメータをスクリプトに公開し、次にそのパラメータを制御するスクリプトを書きます。

まず、UnityエディタでAudioMixerのVolumeパラメータをスクリプトに公開するために、該当するVolumeスライダーを右クリックして「Expose 'Volume (of SE)’ to script」を選択します。これにより、スクリプトからそのパラメータにアクセスできるようになります。

次に、以下のC#スクリプトを使用して、実際にその音量を制御することができます。この例では、AudioMixer内の音量パラメータの値を変更するメソッドSetSEVolumeを含む簡単なスクリプトです。

using UnityEngine;
using UnityEngine.Audio;

public class SoundManager : MonoBehaviour
{
    public AudioMixer audioMixer; // Inspectorで設定するAudioMixerの参照

    // SEのVolumeを設定するメソッド
    public void SetSEVolume(float volume)
    {
        audioMixer.SetFloat("SEVolume", volume);
    }
}

このスクリプトをゲームオブジェクトにアタッチし、InspectorからAudioMixerをスクリプトのaudioMixer変数にアウトレット接続します。そして、SetSEVolumeメソッドを呼び出して、SEのVolumeパラメータの値を変更することができます。メソッドに渡すvolumeはデシベル単位で、通常は-80から0までの値を使用します(0は最大音量、-80は無音に相当します)。これをスライダーイベントやUIのボタンアクションに接続して、ユーザーが音量を制御できるようにすることが一般的です。

公開したパラメータの正確な名前(この例では"SEVolume")は、UnityのAudioMixerウィンドウで設定した名前と一致している必要があります。"Expose to script"を選択した後、AudioMixerのパラメータリストで公開されたパラメータの名前を確認し、スクリプト内で同じ名前を使用してください。

使い方サンプル(ユーザーがUI上のスライダーを動かした際にSE(効果音)の音量を調整)

UnityエディタでSoundManagerスクリプトを含むゲームオブジェクトを作成し、AudioMixerオブジェクトをaudioMixer変数にアウトレット接続します。その後、UIスライダーの値が変更されたときに、その値をSetSEVolumeメソッドに渡してSEの音量を設定するためのイベントをUIスライダーに接続します。

// Unity UIコンポーネントの参照
public Slider seVolumeSlider;

void Start()
{
    // スライダーの値が変更された時のイベントを設定
    seVolumeSlider.onValueChanged.AddListener(SetSEVolume);
}

そして、スライダーの値が変わるたびにSetSEVolumeが呼ばれ、AudioMixerの"SEVolume"パラメータが新しいスライダーの値に基づいて更新されます。スライダーが最大値の場合、音量は最大に設定され、最小値の場合は無音(あるいは最低の設定値)になります。

このコードサンプルでは、AudioMixerのパラメータ名が"SEVolume"と想定していますが、実際にはAudioMixerで設定した正確なパラメータ名に合わせて変更する必要があります。スクリプトのこの部分は、Unityエディタで設定した公開パラメータの名前と一致させることが不可欠です。

現在の状態からsnapshot2へ遷移させるサンプルコード

using UnityEngine;
using UnityEngine.Audio;

public class AudioManager : MonoBehaviour
{
    public AudioMixerSnapshot snapshot1;
    public AudioMixerSnapshot snapshot2;

    // トランジションをトリガーするメソッド
    public void TransitionToSnapshot2()
    {
        // snapshot2に1秒かけてトランジションする
        snapshot2.TransitionTo(1.0f);
    }
}

このスクリプトは、snapshot1からsnapshot2へのトランジションを1秒かけて行います。TransitionToメソッドの引数はトランジションにかける時間(秒)です。このメソッドは、指定したスナップショットへのトランジションをすぐに開始します。

トランジションをさらに細かく制御するには、スナップショットの配列とフェード時間の配列をTransitionToSnapshotsメソッドに渡すこともできます。これにより、複数のスナップショットへのトランジションをより複雑な方法で管理することが可能になります。

ダッキング

ダッキング(Ducking)はオーディオ処理の一種で、ある音源(例えばダイアログや効果音)が特定の音量レベルに達したとき、自動的に別の音源(例えば背景音楽)の音量を一時的に下げる技術です。これにより、一つの音源を際立たせることができ、リスナーの注意をその音源に向けることが可能になります。

ダッキングは放送業界や音楽制作でよく使われ、特にラジオやポッドキャストでのアナウンス、ナレーション、あるいはゲームや動画での特定の音声やサウンドエフェクトを強調する際に効果的です。

どのように機能するか?

ダッキングを行うには、通常は以下のようなプロセスを経ます:

  1. Side Chain(サイドチェイン):
    • ダッキングはしばしばサイドチェインコンプレッサーを用いて実現されます。このコンプレッサーは、ある音源(トリガー源)の音量に応じて別の音源の音量を調整します。
  2. Threshold(閾値):
    • サイドチェインコンプレッサーには閾値が設定されており、トリガー源の音量がこの閾値を超えるとダッキングが発動します。
  3. Ratio(比率):
    • 閾値を超えた後の音量の下げ方を決める比率です。例えば、比率が高いほど、ダッキングされる音源の音量は大幅に下がります。
  4. Attack and Release(アタックとリリース):
    • アタックはダッキングがどれくらい速く開始されるか、リリースはダッキングが解除される速さを指します。

Unityにおけるダッキング

UnityのAudioMixerでは、ダッキングはDuck Volumeエフェクトを用いて設定することができます。このエフェクトを背景音楽グループに適用し、別のグループからのSendエフェクトを用いてそのDuck Volumeをトリガーすることにより、背景音楽を自動的に下げることができます。

ダッキングの利点

ダッキングの主な利点は、重要な音声や効果音を聴きやすくすることで、リスナーの集中をそこに向けることができる点にあります。また、バランスの良いオーディオミックスを作成するのに役立ち、オーディオトラック同士が競合するのを防ぎます。

ゲーム開発においては、プレイヤーが重要なオーディオキューを聞き逃さないようにするために、ダッキングが効果的に使用されます。例えば、重要なイベントの通知、キャラクター間の対話、または大事なサウンドエフェクトが際立つようにするために、他の音源を一時的に下げるのです。

ダッキングの設定

UnityのAudioMixerではスクリプトを使わずにダッキングを設定することができます。Unityのダッキング機能はオーディオのルーティングと特定のエフェクトを使って実現されます。以下はスクリプトを使用せずにAudioMixerでダッキングを設定する手順です:

  1. AudioMixerのセットアップ:
    • AudioMixerウィンドウを開き、ダッキングを適用したいオーディオグループ(例えば背景音楽)に新しいグループを作成します。
  2. Sendエフェクトの追加:
    • ダッキングのトリガーとなるオーディオソース(例えば、効果音やダイアログ)が送出されるグループにAudioMixerGroupを追加し、そのグループにSendエフェクトを追加します。
  3. Duck Volumeの設定:
    • ダッキングを受けるオーディオグループ(背景音楽グループ)にDuck Volumeエフェクトを追加します。
  4. SendとDuck Volumeを接続:
    • Sendエフェクトの出力をダッキングを受けるグループのDuck Volumeエフェクトの入力に接続します。
  5. ThresholdとRatioの調整:
    • Duck VolumeエフェクトでThreshold(ダッキングを開始するトリガーレベル)とRatio(ダッキングの強さ)を調整します。
  6. テスト:
    • ゲームをプレイしてダッキングが正しく機能しているか確認します。必要に応じてさらに細かい調整を行います。

この方法で、オーディオグループ間でのダイナミックなボリューム調整を行うことができます。ダッキングは音声が重要な部分で視聴者の注意を引きつけたいときや、効果音が鳴っている間は背景音楽を小さくしたいときに有効です。スクリプトを使わずに、Unityエディタ内で直接設定を行うことができます。

設定サンプル

実行結果

極端な例になりますが、剣を振っている時、BGMのボリュームが下がっているのがわかります
Ratioを1000%にしています(最大限にBGMの音量が下がります)

Unity

Posted by hidepon