【Unity】音声(BGM・SE)の再生・ループ・フェードアウトなどの設定方法を徹底解説!


Unityでゲームを作る際にBGMSE(効果音)を付けたい時があると思います。

更にただBGMを流すだけではなく、ループや一時停止など細かく設定したい場合もあると思います。

今回はBGM・SEの様々な設定方法(一時停止・フェードアウト・ミュートなど)を解説します。

Unityにおける音声の仕組み

まず、Unityでの音声(BGM・SEなど)の仕組みですが、AudioClipという音源をAudioSourceコンポーネントにアタッチすることで、そのオブジェクトから音が発生します。

その発生した音をゲーム空間の耳であるAudioListenerが聞き取ると、現実のスピーカーに反映されて、ユーザに音が届くという仕組みになっています。

AudioListenerはデフォルトではMain Cameraにアタッチされているため、初期設定ではカメラがユーザの耳になります。

もちろん、AudioListener(耳)はAudioSource(音の発信源)との位置関係で音の大小や位置がちゃんと変わるようにすることができます

シューティングゲームでは非常に重要になる部分ですね。

また、AudioListenerとAudioSourceの間に障壁がある場合、その障壁の影響も受けるような設定もできます

BGMを設定する手順

それではゲームシーンにBGMを設定する方法を説明します。

設定するだけであれば非常に簡単に設定できます。

なお、今回の例ではYoutuberの動画でよく使われるBGM「Ponies and Baloons」を使います。

この音源はYoutubeオーディオライブラリからダウンロードできます。

1.BGMに使う音声ファイルをUnityに取り込む

まず、BGMに使う音声ファイルをUnityに取り組みます。

Projectビューに表示されればよいです。

2.BGMをアタッチするためのゲームオブジェクトを準備する

次にBGMを流すための空のゲームオブジェクトを用意します。

このオブジェクトにAudioSourceコンポーネントをアタッチして、音声の発生源とします。

Add ComponentからAudio > Audio Sourceを選びます。

その後、準備しておいたBGMをProjectビューからAudio SourceのAudioClipにドラッグアンドドロップし、AudioClipを設定します。

これでBGMの設定は完了です。この状態で再生するとBGMが流れます。

SE(効果音)の場合は空のオブジェクトではなくゲームオブジェクトにアタッチしてスクリプトで制御することが多いです。

以上が基本的な音の設定方法になります。

ループ・ピッチ調整・フェードインなどの音声の様々な設定方法

上記のようにBGMとして音を奏でることは非常に簡単ですが、実際にゲームで音声を付ける際にはBGMをループしたり、ピッチを変更したりと、細かな設定や調整を行いたい場合があると思います。

ここからは、音声の細かな設定を、インスペクタビューから設定する方法とスクリプトでコントロールする方法で解説していきます。

ゲーム開始時に音を再生する

BGMはゲーム開始時から再生することは多いと思います。

この設定はインスペクタビューでできます。

インスペクタビューの「Play On Awake」をチェックします。

これだけでゲーム開始時から再生されます。

音楽をループさせる

BGMに設定した音声をループさせたい場合があると思いますが、その場合はインスペクタビューの「Loop」をチェックします。

もしくは、スクリプトで以下のように設定すると、スペースキーでLoopのオンオフを切り替えることができます。

音をミュートする

音をミュートしたい場合、インスペクタビューの「Mute」をチェックします。

もしくは、スクリプトで一時停止(ミュート)と再び再生を実施する場合は以下のスクリプトが参考になると思います。

元々の音量や音の状況を維持したまま音量を0にできるので、ミュートしたい場合には音量を0に変更するよりミュート機能をオンにすることをお勧めします。

音のピッチを変更する

音のピッチを変更する場合、インスペクタビューでは「Pitch」という項目があるので、そこで変更できます。

ただし、インスペクタビューで設定できるピッチの範囲は-3~3です。

スクリプトでピッチを変更する場合、以下のようなスクリプトになります。

このスクリプトは、スペースキーを押すたびにピッチが1上がるようにしています。

スクリプトの場合ピッチの範囲が-3~3に限定されません

ちなみに、ピッチがマイナスになると逆再生されます。

距離によって音の聞こえ方を変更する

BGMやSEなどが発生している場所との位置関係で音の聞こえ方が変わるようにしたりドップラー効果を実現する場合には、インスペクタビューでSpatial Blendを変更します。

Spatial Blendが0だとどんな位置にあっても同じ音の聞こえ方になり、スライダーを右に動かすにつれて位置関係の影響度合いが高くなります。

最大値は1です。

ドップラー効果の影響度や音の大きさが変わる距離などを変更するための細かな設定はSpatial Blendの下にある「3D Sound Settings」で設定します。

各プロパティで設定できる内容は以下になります。

プロパティ 機能
3D Sound Settings Spatial Blend パラメータに比例して適用される設定です。

Spatial Blendパラメータの値が大きいほど3D Sound Settingsの影響は強くなります。

Dopper Level Audio Sourceに適用されるドップラー効果の度合いを設定します。0の場合はドップラー効果が発生しません。
Spread スピーカー空間で 3D ステレオやマルチチャンネルサウンドに対する音の広がりの角度を設定します。
Min Distance 最大音量で聞くことができる範囲を決めることができます。MinDistance の範囲外に出ると音量の減衰が始まります。
Max Distance 音量が弱くなる最大の距離を決めます。最大の距離を超えるとそれ以上離れても音量は変わりません。
Rolloff Mode 距離による音量の変化の仕方を決めます。

種類は3つ

  • Logarithmic Rolloff:対数関数的な音量の変化
  • Linear Rolloff:直線的な音量の変化
  • Custom Roloff:カスタムされた音量の変化
-Logarithmic Rolloff オーディオソースに近ければサウンドは大きいが、オブジェクトから遠くなるとサウンドは急速に小さくなります。
-Linear Rolloff Audio Sourceから離れれば離れるほど、聴こえる音量が一定で小さくなります。
-Custom Rolloff Rolloff グラフの設定によって、オーディオソースから発せられる音の変化の仕方が変わります。

スクリプトでフェードインを実装

フェードインを実装する場合、以下のようなスクリプトで実現できます。

スクリプトの内容を軽く解説すると、FadeInSecondsでフェードインの時間を設定し、FadeDeltaTimeで処理時間を記録するので、FadeDeltaTime/FadeInSecondsでボリュームの比率が1に近づくようにしています。

フェードアウトは逆の発想で、少しずつボリュームの比率を0に近づくようにすればよいのです。

BGMがSEに消されてしまう時の対応

SEが流れる際にBGMがかき消されてしまう場合、BGMとSEの優先度を調整すると解決する場合があります。

優先度についてはインスペクタビューの「Priority」で調整できます。

値は小さいほど優先度が高く0~256の範囲で設定できます。

  • 0:最優先
  • 256:最も優先しない

デフォルトでは128に設定されているので、上記の問題が発生する場合はBGMのPriorityを小さくして調整して下さい。

複数の音声を再生する際に音の調整方法

複数の音声を同時に再生したり、音量のバランスを調整する場合はAudio Mixerを使います。

AudioMixerには主に以下の3つの機能があります。

  • ミックス :同時再生の設定
  • エフェクト :音声への効果付け
  • マスタリング :音声同士の音量や音圧の調整

これまで書いたように、個別のAudio Sourceのパラメータをインスペクタビューやスクリプトで調整する事も出来ますが、AudioMixerを使用することでより直感的な調整が可能です。

AudioMixerの具体的な使い方については今後他の記事で「音声(BGM・SEなど)の応用編」を書くので、今しばらくお待ちください。

【Appendix 1】AudioClipのインスペクタの項目と機能

Unityにおける音声データ(AudioClip)のインスペクタの項目をより詳細に解説します。

インスペクタビューの各項目について深く学びたい方は参考にしていただければと思います。

プロパティ 機能
Force To Mono オンの場合、ステレオサウンドから強制的にモノラルサウンドにダウンミックスされます。これにより、容量が半分になります。
 Normalize オンの場合、音量が最大値でノーマライズ(一定に)されます。Force To Monoがオンの時のみ有効になります。
Load In Background オンの場合、素材を非同期読み込みするようになります。これはメインスレッドを止めないために使う機能ですが、ファイルサイズが大きい場合だと再生が遅れることがあります。
Ambisonic オンの場合、素材がAmbisonic化されます。Ambisonicとは、イマーシブ3Dオーディオのフォーマットの一種で、一般的なサラウンド音声では得られない高い没入感を得ることができます。
Load Type ゲーム実行時にサウンドデータをどのように読み込むかを設定できます。

  • Decomporess On Load:ファイルのLoadと同時に展開(解凍)されます。再生する前に展開しておくことで、再生時に展開する場合よりもパフォーマンス低下を防ぐことができます。ただし、展開すると圧縮された状態の10倍ほどのメモリを使用するため、サイズの小さいファイルに設定してください。
  • Compressed In Memory:ファイルのLoad時には圧縮されたままで、再生時に展開されます。この設定は若干のパフォーマンス低下を発生させます。サイズの大きいファイルに設定してください。
  • Streaming:サウンドをその場でデコードします。圧縮データを取り扱うためのメモリを最小限に抑えることができます。
Preload Audio Data 音声をインポートするか否か
Compression Format 圧縮の設定ができます。

  • Vorbis:MP3などが特許の制限を受けるため、それらの代替として誰でも自由につかえるように開発された圧縮音声フォーマット。Qualityで圧縮率を指定できます。この形式は中程度の長さの SE や音楽に適しています。
  • ADPCM:PCMの1/3.5という低圧縮率で、低音質だけど再生負荷が軽くなります。足音や衝突音、武器などのノイズを多く含んでいて大量に再生される必要があるサウンドに便利です。
  • PCM:品質は高くなりますが、ファイルサイズが大きくなります。非常に短い音響効果に最適です。
Quality Compression FormatのVoibisの時に、圧縮率を設定できます。
Sample Rate Setting サウンド素材のサンプリングレート周波数の設定ができます。

  • Preserve Sample Rate:サンプリングレートは変更されません
  • Optimize Sample Rate:サンプリングレートが解析された最高周波数の成分に基づいて、自動で最適化されます。
  • Override Sample Rate:サンプリングレートを手動で書き換え可能なので、レート周波数を破棄したいときに使用できます。

※補足:サンプリングレート周波数とは、アナログ信号からデジタル信号へ変換するADコンバーターにおいて、1 秒間に実行する標本化(サンプリング)処理の回数のことです。単位は「Hz」で、数値が大きいほどより高速なアナログ入力信号をデジタル値に変換できるため、高音質になります。ただし、データ量も比例して増えため、ストレージ容量に制限のあるメディアやデバイスの場合は適切な周波数を選択する必要があります。

また、Unityが扱える音声の拡張子は以下になります。(バージョンはUnity 2019.1.12f)

形式 拡張子
MPEG layer 3 .mp3
Ogg Vorbis .ogg
WAV .wav
AIFF .aiff / .aif
Ultimate Soundtracker モジュール .mod
Impulse Tracker モジュール .it
Scream Tracker モジュール .s3m
FastTracker 2 モジュール .xm

【Appendix 2】Audio Sourceのインスペクタの項目と機能

次に、音源になるAudio Sourceのインスペクタの項目を詳細に解説します。

プロパティ 機能
Audio Clip Audio Sourceで再生されるAudio Clipを指定します
Output Audio Mixer(色々な音源をミックスしたり、それにエフェクト・マスタリングをかける機能)で使用します。
Mute オンの時に音声がミュートされます。音声のオンオフを着かえたい場合に使います。
Bypass Effects Audio Sourceに適用されているエフェクト(環境効果)を無効にします。Audio Sourceのエフェクトの有効/無効を切り替える際に使います。
Bypass Listener Effects Audio Listenerに適用されているエフェクトを無効にします。Audio Listenerのエフェクトの有効/無効を切り替える際に使います。
Bypass Reverb Zones Reverb Zones(エフェクトのない場所からある場所へと徐々に移りたい場合に使用する機能)に適用されているエフェクトを無効にします。
Play On Awake シーン起動時にサウンドが再生されるかどうかを選択します。無効の場合、スクリプトで Play() コマンドを使用してスタートする必要があります。
Loop Audio Clip を繰り返し再生にすることができます。
Priority Audio Sourceの優先度を0から256までで決めることができます。デフォルトは128です。BGMでSEがかき消される場合などに使います。
Volume Audio Listenerから1メートルの距離における音の大きさです。
Pitch Audio Clipのピッチ(音のスピードとそれに伴う音の高低)を変更することができます。1 が通常の再生スピードの値です。
Stereo Pan 2D サウンドのステレオフィールドの位置を設定します。
Spatial Blend オブジェクト同士の距離や位置関係の影響を受ける比率を設定できます。0(2D側)に設定した場合、距離等が関係なく一定の音量でBGMやSEが聞こえます。

一方で1(3D側)に設定した場合、距離によって音量が変化し、ドップラー効果なども起こるようになります。

Reverb Zone Mix Audio Reverb Zoneコンポーネントの影響比率を調整します。値は0~1です。
3D Sound Settings Spatial Blend パラメータに比例して適用される設定です。

Spatial Blendパラメータの値が大きいほど3D Sound Settingsの影響は強くなります。

Dopper Level Audio Sourceに適用されるドップラー効果の度合いを設定します。0の場合はドップラー効果が発生しません。
Spread スピーカー空間で 3D ステレオやマルチチャンネルサウンドに対する音の広がりの角度を設定します。
Min Distance 最大音量で聞くことができる範囲を決めることができます。MinDistance の範囲外に出ると音量の減衰が始まります。
Max Distance 音量が弱くなる最大の距離を決めます。最大の距離を超えるとそれ以上離れても音量は変わりません。
Rolloff Mode 距離による音量の変化の仕方を決めます。

種類は3つ

  • Logarithmic Rolloff:対数関数的な音量の変化
  • Linear Rolloff:直線的な音量の変化
  • Custom Roloff:カスタムされた音量の変化
-Logarithmic Rolloff オーディオソースに近ければサウンドは大きいが、オブジェクトから遠くなるとサウンドは急速に小さくなります。
-Linear Rolloff Audio Sourceから離れれば離れるほど、聴こえる音量が一定で小さくなります。
-Custom Rolloff Rolloff グラフの設定によって、オーディオソースから発せられる音の変化の仕方が変わります。

まとめ

いかがでしたか?

今回はUnityでの音声(BGM・SEなど)の鳴らし方についてやりました。

BGMやSEを効果的に使えるとゲームのクオリティが非常に上がりますので、この記事を参考にぜひ巧みに扱ってください!

音声以外でUnityについて学びたい方は是非こちらをご覧ください。


この記事はいかがでしたか?よければシェアをお願いします。

あきごろう

株式会社x garden CGO(Chief Growth Officer) Unityエンジニアとして日々Unityと奮闘中 自他共に認めるゲーマー Splatoon最高記録:世界6位(リグマペア) ApexLegends最高記録:5連チャンピオン