Unityで簡単な2D脱出ゲームを作ってウェブサイトで公開してみよう 〜音声オブジェクト〜

音声オブジェクト

この記事を三行にまとめると

ゲーム中にずっと流しておきたいBGMなども同じ方法で再生できる
なぜかレシピ通りに作ろうとしない料理初心者と変わらないレベル
改めて見直してみるといろいろ反省点はありますね
これまでの回でゲームもだいぶ完成に近づきました。本シリーズも残すとこあと四回(予定)です。というかあとはクリア画面さえあれば公開できるような状態にはすでになっているんですけど、もうちょっとこんな要素があると良いかもしれないというのがいくつかあるので、今日からはそれを紹介していこうかと思います。

今回は音声オブジェクトを使って音を出す方法を紹介します。本作では特定のタイミングで効果音を出すことしかやってないんですが、ゲーム中にずっと流しておきたいBGMなども同じ方法で再生できるのでご安心ください。

動画はこちらです。





音声オブジェクトの作成

音声は「Audio Source」というオブジェクトを使います。これはUIじゃなくて「Audio → Audio Source」で作成します。

Audio Source

音声オブジェクトは画面上では見えないオブジェクトです。シーンウインドウで見るとデフォルトでは画面の真ん中に存在しているように見えますが、別に邪魔にはならないのでヒエラルキーではどこにいても大丈夫でしょう。UIみたいに重なるとクリックできなくなったりすることもないですしね。

ただし非アクティブな親オブジェクトの子供にいる時は音が再生されないので、その点だけは注意です。僕はいつも音声オブジェクトは他のCanvasオブジェクトなどとは独立させて、まとめて一つの親オブジェクトで管理しています。

音声オブジェクトのインスペクターはこんな感じです。

インスペクター

いろいろと設定項目があるんですが、僕は音の扱いに関してはなぜかレシピ通りに作ろうとしない料理初心者と変わらないレベルなので、ここでは最低限の設定だけ見ていきます。

まず音声ファイルは「Audio Clip」にセットします。プロジェクトウインドウからドラッグ&ドロップしてくればオーケーです。mp3やwavファイルなどが使用できます。

これだけでもう再生できる状態にはなるんですが、全く味見をしない料理初心者と変わらないレベルでもいじることになるであろう項目としては「Play On Awake」と「Loop」があります。

「Loop」は名前の通り音声をループさせるかどうかの設定です。チェックを入れておくとループ再生します。

「Play On Awake」は初期化時に自動で再生するかどうかの設定です。このチェックがONになっているとオブジェクトが初期化されると同時に再生が始まります。初期化のタイミングはスクリプトのStart関数やAwake関数などと同じようにオブジェクトが最初にアクティブになる時です。ゲーム開始時にアクティブであれば開始と同時に音が鳴ります。ゲーム開始時に非アクティブであれば最初にアクティブになるタイミングで音が鳴ります。親オブジェクトが非アクティブであればその親が最初にアクティブになるタイミングで音が鳴ります。

ゲーム開始と同時に流したいBGMに使う音声オブジェクトはこのPlay On Awakeのチェックを入れておけば自動で流れ始めますが、クリックした時に出したい効果音などは勝手に鳴ると困るのでこのチェックをはずしておく必要があります。



音声の再生

インスペクターで再生イベントを設定する場合は、音声オブジェクトをEvent Triggerにセットして、プルダウンメニューから「AudioSource → Play()」を選択すればオーケーです。PointerClickイベントにセットした場合は、これでオブジェクトがクリックされた時に音が出ます。

インスペクターで再生(お手軽簡単)

スクリプトから再生する場合はAudioSourceコンポーネントを型とした変数を使って再生します。

public class Password : MonoBehaviour {
  public GameObject door;
  public Dialog password;
  protected bool locked = true;
  public AudioSource open;

  protected void Unlock() {
    door.SetActive(true);
    password.CloseDialog();
    locked = false;
    open.Play();
  }
}

Unlockはパスワードを解除した時に発動する関数です。この関数の中でPlay関数を呼び出せば、パスワード解除と同時にopen変数にセットした音声が再生されます。本作ではドアの開く音を再生しています。

GetComponentを使って再生することもできます。

public GameObject open;

protected void Unlock() {
  open.GetComponent<AudioSource>().Play();
}






BGMはともかくとして、ちょっとした効果音がつくだけでもゲームっぽさは増す気がしますよね。音の出し方によっては逆にゲームのクオリティを下げる結果になるかもしれませんが……本作も自分で作ってる時はあまり意識してませんでしたが、改めて見直してみると木製のドアっぽい画像なのに開く音が金属の扉っぽいのは何か違和感あるなとか、パネルをセットする時のクリック音はもっといかにもパネルをはめてるような音の方が良かったなとか、いろいろ反省点はありますね。次回作ではその辺ももっと頑張ろうと思います。

次回はシーンの切り替えをやってみます。これまで画面の切り替えはアクティブ状態の切り替えでのみ行なってきましたが、シーンの切り替えでも画面の切り替えを実装できます。ちょい癖がありますが……(不穏)

それじゃあ次回もよろしくお願いしんぼりるどるふ。
 もしかしたら何か関連しているかも? 
 みんなからのコメント 
まだコメントはいただけてないみたい……