【Unity】音声(BGM・SE)の再生・ループ・フェードアウトなどの設定方法を徹底解説!
Unityでゲームを作る際にBGMやSE(効果音)を付けたい時があると思います。
更にただBGMを流すだけではなく、ループや一時停止など細かく設定したい場合もあると思います。
今回はBGM・SEの様々な設定方法(一時停止・フェードアウト・ミュートなど)を解説します。
Contents
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のオンオフを切り替えることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using UnityEngine; using System.Collections; public class Loop : MonoBehaviour { AudioSource audioSource; void Start() { audioSource = GetComponent<AudioSource>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) audioSource.loop = !audioSource.loop; } } |
音をミュートする
音をミュートしたい場合、インスペクタビューの「Mute」をチェックします。
もしくは、スクリプトで一時停止(ミュート)と再び再生を実施する場合は以下のスクリプトが参考になると思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using UnityEngine; using System.Collections; public class Mute: MonoBehaviour { AudioSource audioSource; void Start() { audioSource = GetComponent<AudioSource>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) audioSource.mute = !audioSource.mute; } } |
元々の音量や音の状況を維持したまま音量を0にできるので、ミュートしたい場合には音量を0に変更するよりミュート機能をオンにすることをお勧めします。
音のピッチを変更する
音のピッチを変更する場合、インスペクタビューでは「Pitch」という項目があるので、そこで変更できます。
ただし、インスペクタビューで設定できるピッチの範囲は-3~3です。
スクリプトでピッチを変更する場合、以下のようなスクリプトになります。
このスクリプトは、スペースキーを押すたびにピッチが1上がるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using UnityEngine; using System.Collections; public class Pitch: MonoBehaviour { AudioSource audioSource; void Start() { audioSource = GetComponent<AudioSource>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { audioSource.pitch += 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 | Audio Sourceから離れれば離れるほど、聴こえる音量が一定で小さくなります。 |
-Custom Rolloff | Rolloff グラフの設定によって、オーディオソースから発せられる音の変化の仕方が変わります。 |
スクリプトでフェードインを実装
フェードインを実装する場合、以下のようなスクリプトで実現できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using UnityEngine; using System.Collections; public class FadeIn : MonoBehaviour { AudioSource audioSource; public bool IsFade; public double FadeInSeconds = 1.0; bool IsFadeIn = true; double FadeDeltaTime = 0; void Start() { audioSource = GetComponent<AudioSource>(); } void Update() { if (IsFadeIn) { FadeDeltaTime += Time.deltaTime; if (FadeDeltaTime >= FadeInSeconds) { FadeDeltaTime = FadeInSeconds; IsFadeIn = false; } audioSource.volume = (float)(FadeDeltaTime / FadeInSeconds); } } } |
スクリプトの内容を軽く解説すると、FadeInSecondsでフェードインの時間を設定し、FadeDeltaTimeで処理時間を記録するので、FadeDeltaTime/FadeInSecondsでボリュームの比率が1に近づくようにしています。
フェードアウトは逆の発想で、少しずつボリュームの比率を0に近づくようにすればよいのです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using UnityEngine; using System.Collections; public class FadeOut : MonoBehaviour { AudioSource audioSource; public bool IsFade; public double FadeOutSeconds = 1.0; bool IsFadeOut = true; double FadeDeltaTime = 0; void Start() { audioSource = GetComponent<AudioSource>(); } void Update() { if (IsFadeOut) { FadeDeltaTime += Time.deltaTime; if (FadeDeltaTime >= FadeOutSeconds) { FadeDeltaTime = FadeOutSeconds; IsFadeOut = false; } audioSource.volume = (float)(1.0 - FadeDeltaTime / FadeOutSeconds); } } } |
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 | ゲーム実行時にサウンドデータをどのように読み込むかを設定できます。
|
Preload Audio Data | 音声をインポートするか否か |
Compression Format | 圧縮の設定ができます。
|
Quality | Compression FormatのVoibisの時に、圧縮率を設定できます。 |
Sample Rate Setting | サウンド素材のサンプリングレート周波数の設定ができます。
|
※補足:サンプリングレート周波数とは、アナログ信号からデジタル信号へ変換する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 | Audio Sourceから離れれば離れるほど、聴こえる音量が一定で小さくなります。 |
-Custom Rolloff | Rolloff グラフの設定によって、オーディオソースから発せられる音の変化の仕方が変わります。 |
まとめ
いかがでしたか?
今回はUnityでの音声(BGM・SEなど)の鳴らし方についてやりました。
BGMやSEを効果的に使えるとゲームのクオリティが非常に上がりますので、この記事を参考にぜひ巧みに扱ってください!
音声以外でUnityについて学びたい方は是非こちらをご覧ください。
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!