この記事では、UnityでBGMやSEなどの音を鳴らす方法を解説します。
BGMを流すことで場の緊張感や楽しげな雰囲気を醸し出すことができ、SEを鳴らすことで爽快感やリアリティさを演出することができます。
- BGM = Background Music(バックグラウンドミュージック)、背景音楽
- SE = Sound Effects(サウンド・エフェクト)、音響効果
音を鳴らす基本
まずはゲーム内で音を鳴らすのに必要なコンポーネントやデータを確認していきましょう。
オーディオデータ AudioClip
Unity で使用するオーディオファイルは「AudioClip(オーディオクリップ)」と呼ばれています。このデータを次に紹介する AudioSourceコンポーネントに渡してサウンドを再生します。
LinkAudioClip - Unity スクリプトリファレンス
アセットストアやフリーサイトなどでダウンロードして音源を用意しましょう!
※ インポートできるオーディオファイル形式は「.aif、.wav、.mp3、.ogg」です。
音を再生する AudioSourceコンポーネント
音を鳴らすには AudioSourceコンポーネントを使います。
LinkAudioSource - Unity スクリプトリファレンス
音を鳴らしたいオブジェクトに AudioSourceコンポーネントをアタッチし、ゲーム開始時に再生させたり、スクリプトから再生することができます。
BGM、 SEのどちらも AudioSourcコンポーネントを用いて再生します。
音を聞く AudioListenerコンポーネント
AudioSourceコンポーネントで音を再生しただけではプレイヤーはその音を聞くことができません。プレイヤーの耳である AudioListenerコンポーネントが必要となります。
LinkAudioListener - Unity スクリプトリファレンス
AudioListenerコンポーネントはデフォルトでメインカメラにアタッチされています。
- AudioListenerは複数設定することは推奨されていない
音を鳴らしてみる
それでは、実際に音を鳴らしてみましょう!
まずは適当なプロジェクトを作成し、その中に空オブジェクトを作成してください。作成したらそのオブジェクトに AudioSourceコンポーネントをアタッチします。
次に、AudioSourceコンポーネントのインスペクター上でオーディオクリップを設定します。ちなみに、今回はアセットストアにある「8Bit Music - 062022」を使わしてもらいました。
そしたら、「PlayOnAwake(ゲーム開始時に再生)」にチェックが入っているか確認し、ゲームを再生してみてください。
これで渡したオーディオクリップが再生されました。
BGM
BGMを再生する場合は、「Loop(ループ)」にチェックをし、「SpatialBlend(立体音響ブレンド)」を「0」にします。
| Loop | ループ再生するかどうか |
|---|---|
| SpatialBlend | 3D立体化の計算(減衰やドップラーなど)によってどのくらい影響を受けるか設定します。 「0.0」は音を完全に「2D」にし、「1.0」は完全に「3D」になる |
BGMをループ再生し、位置関係によってボリュームが変わらないように設定できます。
スクリプトからBGMを再生する
スクリプトからBGMを再生するには、AudioSourceのPlay()を呼び出します。
using UnityEngine; public class Sound : MonoBehaviour { private AudioSource audioSource; void Start() { // AudioSource コンポーネントの取得 audioSource = GetComponent<AudioSource>(); // 再生 audioSource.Play(); } }
LinkAudioSource-Play - Unity スクリプトリファレンス
曲を変更する
途中で曲を変更したい場合は、AudioSourceのClipを変更してから再生するだけです。
using UnityEngine; public class Sound : MonoBehaviour { private AudioSource audioSource; // 複数のBGMを受け取っておく [SerializeField] private AudioClip[] clips; void Start() { // AudioSource コンポーネントの取得 audioSource = GetComponent<AudioSource>(); // 曲の変更(clipsからランダムに選ばれる) audioSource.clip = clips[Random.Range(0, clips.Length)]; // 再生 audioSource.Play(); } }
LinkAudioSource-clip - Unity スクリプトリファレンス
BGMを途切らせない
シーンを遷移する際にオブジェクトが削除されてしまうのでBGMが途切れてしまう。つまりは削除されないようにすればBGMは途切れることがなくなります。
シーンを遷移しても削除されないようにするにはDontDestroyOnLoad()を使います。
using UnityEngine; public class Sound : MonoBehaviour { void Start() { // 引数に指定したオブジェクトを削除されないように設定できる DontDestroyOnLoad(this); } }
SE
SEを再生する場合は、AudioSorce の設定を以下のように変更します。
- オーディオクリップは設定しておかない
- 「Loop(ループ)」と「PlayOnAwake(ゲーム開始時に再生)」のチェックを外す
- 「SpatialBlend(立体音響ブレンド)」は状況によって変更する
そしたら以下のようなスクリプトを作成し、アタッチしてください。
using UnityEngine; public class Sound : MonoBehaviour { private AudioSource audioSource; // SEを受け取っておく [SerializeField] private AudioClip se; void Start() { // AudioSource コンポーネントの取得 audioSource = GetComponent<AudioSource>(); } private void Update() { // 左クリックした場合 if(Input.GetMouseButtonUp(0)) { // 引数のクリップを再生 audioSource.PlayOneShot(se); } } }
後はインスペクター上で再生したSEを渡しておきます。
ゲームを実行し、左クリックを押してみてください。
SEが再生されたと思います。
ポイントはSEの再生にはPlayOneShot()を使うことです。BGMの再生に使うPlay()と違って重ねて再生することができます。
LinkAudioSource-PlayOneShot - Unity スクリプトリファレンス
まとめ
この記事では、BGMやSEなどの音を鳴らす方法を解説しました。
サウンドがないゲームはとても寂しいものになってしまいます。なので、適切にBGMやSEを流して楽しいゲームにしちゃいましょう!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ


