Unityの入門書で通称”ヒヨコ本”として親しまれている”Unity5入門 最新開発環境による簡単3D&2Dゲーム制作
タイトル画面、ゲームプレイ中、ゲームオーバー画面のそれぞれにBGMを設定してみたいと思います。
まずは今回使用する3種類のBGM再生を切り替える処理と条件を整理。
タイトルBGMはゲームスタートと同時に再生すればいいのでStart()関数で実行。そしてプレイ中BGMはボタンクリックで再生すればいいので新しい関数PlayBGM()処理を用意しました。
ゲームオーバーBGMはプレイヤーの操作に関係なく再生処理条件が発生するのでUpdate()処理で実行することにしました。
ただし、オーディオファイル再生処理がループしないよう、Update() 関数でオーディオファイル再生処理を一度だけ実行するためのフラグを用意します。
下記のようになりますね。
[Hierarchy]ウィンドウ > SoundManagerを選択。[Inspector]ウィンドウ > “Sound Manager (Script)”コンポーネントパネルの右上にある
歯車アイコンをクリック > Edit Script を選択してエディタを起動。
下記の通りコードを入力します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SoundManager : MonoBehaviour { // "AudioSource"コンポーネントを格納する変数 private AudioSource audioSource; // 効果音の"AudioSource"コンポーネントを格納する変数 //public AudioSource SEAudioSource; // Update() 処理内でオーディオファイル再生処理を一度だけ実行するためのフラグ private bool audioPlay; // タイトル画面で再生するオーディオクリップを格納する変数 public AudioClip titleBGM; // ゲームプレイ中に再生するオーディオクリップを格納する変数 public AudioClip playBGM; // ゲームオーバー画面で再生するオーディオクリップを格納する変数 public AudioClip gameOverBGM; // スタートボタンをクリックした時に再生するオーディオクリップを格納する変数 //public AudioClip startClick; // リトライボタンをクリックした時に再生するオーディオクリップを格納する変数 //public AudioClip retryClick; // ゲームの初期化 void Start() { // オーディオファイル再生処理のフラグを設定 audioPlay = false; // "AudioSource"コンポーネントを変数"audioSource"に格納する audioSource = GetComponent(); // "AudioSource"コンポーネントにオーディオクリップ"titleBGM"を // 割り当てる audioSource.clip = titleBGM; // オーディオファイルを再生する audioSource.Play(); } // ゲーム実行中の繰り返し処理 void Update() { // ゲームオーバー画面が表示されていれば //(スクリプト"Manager"の変数"gameOve"の値を参照) if (Manager.gameOver // オーディオファイル再生処理フラグの値が"false"であれば && !audioPlay) { // "AudioSource"コンポーネントにオーディオクリップ"gameOverBGM"を // 割り当てる audioSource.clip = gameOverBGM; // オーディオファイルを再生する audioSource.Play(); // オーディオファイル再生処理フラグの値を"true"に設定 audioPlay = true; } } // ボタンクリックでオーディオファイルを再生する処理 public void PlayBGM() { // "AudioSource"コンポーネントにオーディオクリップ"playBGM"を // 割り当てる audioSource.clip = playBGM; // オーディオファイルを再生する audioSource.Play(); // オーディオファイル再生処理フラグの値を"false"に設定 audioPlay = false; } }
スクリプトが用意出来たので割り当てるBGMをアセットストアから無料のアセットを探します。今回はMega Game Music Collection FREE を使用しました。
ダウンロードしたアセットMega Game Music Collection FREE は有料アセットのデモ版という形でゲームのジャンルに合わせていくつかのBGMが用意されています。
オーディオファイルを再生するためのAudio Sourceコンポーネントを追加します。 [Hierarchy]ウィンドウ > SoundManagerを選択。[Inspector]ウィンドウ > [Add Component]ボタン > Audio > Audio Source を選択。
再生するBGMはループ再生するので、追加したコンポーネントのLoop にチェックを入れておきます。
ここでいったん動作確認をしておきましょう。[Hierarchy]ウィンドウでオブジェクト”SoundManager”を選択しておきましょう。
[Inspector]ウィンドウで”AudioClip”フィールドのオーディオファイル名が切り替わっていればOKです。
WebGLでビルドしたゲームをWebページに掲載する場合、ゲームがロードされていきなりBGMが鳴るのはよろしくないので、音量のミュートボタンを設置してゲームスタート時はミュートしておきたいと思います。
音量のミュートボタンはトグルボタンを使用します。[Hierarchy]ウィンドウ > [Create]ボタン > UI > Toggle を選択。名前を”Toggle BGM”に変更します。Toggleボタンオブジェクトの階層は下図のようになっています。
それぞれのオブジェクトを下記の通り調整しました。
ラベルにはUIエフェクトの”Outline”コンポーネントを追加しています。
それからIs On のチェックを外しておきます。
最後にSoundManagerのAudioSourceコンポーネントを無効化しておきましょう。
[Hierarchy]ウィンドウ > SoundManager を選択。[Inspector]ウィンドウ > AudioSourceコンポーネントパネルの左上にあるチェックボックスを外します。
ここまでの内容をWebGLビルドしてみました。マウスクリックでボールが発生するのに合わせてBGMのチェックボックスを切り替えた場合もボールが発生してしまうのはまた改めて修正が必要ですね。
unityroom で公開しているゲームファイルもあわせて更新しました。