ゲームを制作していると、BGMやボタンを押した音、攻撃音など、さまざまな音を再生する機会があります。
UnityではAudioSourceコンポーネントを使用して音を再生しますが、初心者の方は
「AudioSourceは1つだけでいいのでは?」
と思うかもしれません。
私も最初は同じ疑問を持っていました。
しかし実際にゲームを作り始めると、BGM用とSE用でAudioSourceを分けるメリットがたくさんあります。
この記事では、その理由を解説します。
AudioSourceとは?
AudioSourceは、AudioClipを再生するためのコンポーネントです。
例えば、
- BGM
- ボタンを押した音
- 攻撃音
- ダメージ音
など、ゲーム内のさまざまな音を再生できます。
AudioSourceを1つだけで運用するとどうなる?
例えばAudioSourceが1つだけだったとします。
AudioManager
└── AudioSource
この状態でもゲームは動きます。
例えばBGMを再生する場合は、
audioSource.clip = battleBGM;
audioSource.Play();
SEを再生する場合は、
audioSource.PlayOneShot(buttonSE);
と書くことができます。
一見問題なさそうですが、ゲームの規模が大きくなると少しずつ管理が難しくなります
BGMとSEでは役割が違う
まず理解したいのが、BGMとSEは用途が異なるということです。
BGM
BGMは
- タイトル画面
- バトル
- リザルト
など、シーンごとに基本的に1曲だけ流れます。
ループ再生することも多く、ゲーム全体の雰囲気を作る役割があります。
SE
SEは
- ボタンを押す
- 攻撃する
- ダメージを受ける
- レベルアップする
など、イベントが発生するたびに再生されます。
しかも短時間に何度も鳴る可能性があります。
AudioSourceを2つに分ける
そこでおすすめなのがこちらです。
AudioManager
├── AudioSource(BGM)
└── AudioSource(SE)
メリット① BGMだけ止められる
例えばゲームオーバーになった瞬間だけBGMを止めたい場合があります。
BGM専用AudioSourceなら
bgmSource.Stop();
だけで済みます。
SEには影響しません。
メリット② BGMとSEの音量を別々に調整できる
ゲームでは
- BGMを小さく
- SEを大きく
したいことがあります。
AudioSourceを分けておけば
bgmSource.volume = 0.3f;
seSource.volume = 1.0f;
のように簡単に調整できます。
メリット③ SEを連続で再生できる
SEは
- 攻撃
- ダメージ
- ボタン
などが同時に鳴ることがあります。
そのため
seSource.PlayOneShot(attackSE);
を使うことで、再生中でも別のSEを重ねて鳴らすことができます。
メリット④ AudioMixerを使いやすい
UnityにはAudioMixerという便利な機能があります。
AudioMixerを使うと
- BGMだけミュート
- SEだけミュート
- オプション画面で音量調整
などが簡単になります。
AudioSourceを最初から分けておくことで、後からAudioMixerを導入しやすくなります。
Inspectorでの設定
AudioManagerにAudioSourceを2つ追加します。
BGM
- Loop:ON
- Play On Awake:OFF
SE
- Loop:OFF
- Play On Awake:OFF
あとはスクリプトからそれぞれ参照します。
[SerializeField] private AudioSource bgmSource;
[SerializeField] private AudioSource seSource;
AudioManagerの例
using UnityEngine;
public class AudioManager : MonoBehaviour
{
[SerializeField] private AudioSource bgmSource;
[SerializeField] private AudioSource seSource;
public void PlayBGM(AudioClip clip)
{
bgmSource.clip = clip;
bgmSource.Play();
}
public void PlaySE(AudioClip clip)
{
seSource.PlayOneShot(clip);
}
public void StopBGM()
{
bgmSource.Stop();
}
}
このように役割ごとにメソッドを分けておくと、他のスクリプトからも呼び出しやすくなります。
まとめ
ゲーム制作では、AudioSourceをBGM用とSE用に分けるのが一般的です。
分けることで、
- BGMだけ停止できる
- 音量を別々に設定できる
- SEを重ねて再生しやすい
- AudioMixerへ発展しやすい
- スクリプトの管理がしやすくなる
といったメリットがあります。
ゲーム制作を始めたばかりの頃は「AudioSourceは1つで十分では?」と思うかもしれませんが、開発が進むほど役割を分けておく恩恵を実感できます。


コメント