BGM の再生・一時停止・停止・ループを行う
検証環境
- Windows
-
- Windows 11
- Unity エディター
-
- 2021.3.3f1
- 入力システムパッケージ
-
- 1.3.0
この Tips の前提設定
この Tips の説明の前提として以下の設定を事前に行っています。
サンプルに付属している素材について
以下のサイト様より BGM を借用しています。
音声ファイルについて
Unity の標準機能で再生できる音声ファイルの形式は以下のようなものがあります。本 Tips で使用するので事前に用意しておいてください。
- OggVorbis (.ogg)
- MPEG layer 3 (.mp3)
詳しくは Unity 公式のマニュアルを参照してください。
BGM の再生について
BGM を再生する方法についてはいくつかありますが、ここでは標準機能を使用しつつ簡単な方法で再生できる手順について説明したいと思います。
内容としてはボタンを配置してボタンをクリックすることによって再生・一時停止・停止ができるようにします。 実際のゲームでは同様の処理をボタン以外で実装すればOKです。
まずは図のように BGM を再生するためのボタンを配置します。
用意した音声ファイルをプロジェクトにドロップして追加します。
次にヒエラルキーに「オーディオ ソース」を追加します。
作成した Audio Source を選択すると Audio Source コンポーネントに「オーディオクリップ」があるので、そこにプロジェクトから音声ファイルをドロップして設定します。
ちなみにこのままゲームを開始すると設定した BGM がいきなり流れます。これは「ゲーム開始時に再生」にチェックが入っているためです。 シーン開始時に即座に再生する場合はこのままで問題ないですが、今回は即座に再生しないのでこのチェックは外しておきます。
次にスクリプトを作成します。名前は MusicPlayer
としておきます。
スクリプトは以下のようにします。
using UnityEngine;
public class MusicPlayer : MonoBehaviour
{
[SerializeField] private AudioSource AudioSource;
public void OnClickPlay()
{
// オーディオを再生します
AudioSource.Play();
}
public void OnClickPause()
{
// オーディオを一時停止します
AudioSource.Pause();
}
public void OnClickStop()
{
// オーディオを停止します
AudioSource.Stop();
}
}
AudioSource
は後でエディターからセットします。この AudioSource は先ほど音声ファイルをセットしたものとなります。
AudioSource
にそれぞれ Play
, Pause
, Stop
メソッドがあるのでそれぞれ再生、一時停止、停止を実行することが可能です。
スクリプトは Audio Source にアタッチしてもいいのですが、今回は EventSystem にアタッチします。 スクリプトに先ほど作成した Audio Source をセットしておいてください。
後は3つのボタンのクリックイベントに各メソッドを割り当てます。
設定が終わったらゲームを実行して BGM が再生されるか確認します。
再生、一時停止、停止は一般的に使われる用語なので特に詳しく書く必要もないですが以下のように動作すると思います。
- 再生ボタンをクリックすると BGM が1回だけ再生され最後まで再生される
- 再生中に一時停止ボタンをクリックすると再生されている音が止まる
- 一時停止中に再生ボタンをクリックすると停止していた位置から音が再生される
- 再生中に停止ボタンをクリックすると再生されている音が止まる
- 停止中に再生ボタンをクリックすると最初から再生される
- 一時停止中に停止ボタンをクリックすると一時停止していた位置が解除され次回再生時は最初からになる
- 再生中に再生ボタンをクリックすると、現在再生されている音は停止され初めから再生される
ループ再生
デフォルトで BGM を再生し最後まで再生されると自動的に停止します。 BGM をループして再生し続けたい場合は Audio Source コンポーネントにある「ループ」にチェックを入れると停止ボタンを押すまで繰り返し再生し続けます。
効果音の再生と内容は同じ
効果音側の Tips をすでに見ている方なら気づいているかもしれませんが、効果音と BGM は同じ設定で再生できるようになっています。 ゲームフレームワークによっては効果音と BGM の処理は別々になっている場合がありますが Unity ではどちらも同じ処理で再生することができるようになっています。
ウィンドウが非アクティブ化したときに BGM が一時停止する現象について
初期設定では他のウィンドウがアクティブ状態になりゲーム画面が非アクティブ化するとゲーム自体が一時停止状態になります。 これに伴って BGM の再生も中断状態になります。
これを回避するにはプロジェクト設定でバックグラウンドで実行するようにすれば BGM が中断されることはなくなります。