【第7回】超入門!Unityで2D脱出ゲームを作ろう!「BGM・SEの設定編」

第7回BGM・SEの設定編
ゆくすぃ

ごきげんよう、Budding Lab.編集部のゆくすぃです!
世界の街並みや自然を散策できるVRコンテンツを待ち望んでいたんですが、遂に、サブスクリプションで見つけちゃいました!

ゲームが大好きな皆さんなら、一度は「自分でゲームを作ってみたい!」と、思ったことがあるのではないでしょうか?

本連載では、ゲーム開発初心者のゆくすぃが、基礎的なスクリプトだけを使って、超入門・2D脱出ゲームの作り方を解説します!

本記事は、第7回「BGM・SEの設定編」です。

プログラミングの専門知識がなくたって、画像や音楽作成アプリが使えなくたって、案外、ゲームって作れるものです。興味が湧いたなら、ぜひ挑戦してみてください!

目次

BGM・SE(効果音)素材をプロジェクトに追加する

まず、プロジェクトの「Assetsフォルダ」内に、音素材を保存する「Soundsフォルダ」を作成します。

Projectウインドウの中で右クリックすると、コンテキストメニューが表示されます。その中から「Create」を選び、追加で展開されるメニューの中から「Folder」を選んでクリックします。

Soundsフォルダを作成する

すると、新しいフォルダが追加されるので、名前を入力して確定します。今回は「Sounds」としました。

準備しておいたBGM・SE(効果音)素材は、すべてこのSoundsフォルダ内にドラッグ&ドロップして保存します。
因みに、Unityが対応している音声ファイル形式は「.mp3」「.wav」「.aiff / .aif」「.ogg」です。

BGMを設定する

TitleSceneで「Game Start」をクリックしたら、シーンがGameSceneへ切り替わり、ゲームが開始します。そのタイミングでBGMを鳴らしてみましょう。

HierarchyウインドウでParentPanelを選択し、Inspectorウインドウの「Add Component」で「Audio」と入力して、Audio Sourceコンポーネントを追加します。

Inspectorウインドウの「Add Component」でAudio Sourceコンポーネントを追加する

AudioSourceコンポーネントを追加する

Audio Sourceコンポーネントが追加されたら、以下のようにプロパティを設定します。

Audio Sourceコンポーネントの設定
Audio Sourceコンポーネントのプロパティ設定
  • AudioClip:鳴らしたいBGM素材を参照
  • Play On Awake:チェックを入れる = ゲームが起動すると自動的にBGMが再生される
  • Loop:チェックを入れる = ループ再生される
  • Volume:必要に応じて調整
  • Spatial Blend:0.0で2D音声、1.0で3D音声。今回は2Dゲームなので「0.0」設定

再生モードでプロジェクトを実行する

エディター画面のツールバーにある「▶(再生ボタン)」をクリックすると、Gameビューに切り替わり、再生モードでプロジェクトが実行されます。

ゲーム開始後、自動的にBGMが流れればOKです!
GameビューからSceneビューに戻るには、もう一度、再生ボタンをクリックします。

SE(効果音)を鳴らすスクリプトを準備する

ボタンをクリックした時、アイテムを入手した時、脱出口が出現した時、脱出口をクリックした時・・・プレイヤーが起こした様々なアクションに対し、それに応えるSE(効果音)を鳴らしましょう。

SEを鳴らすスクリプトを書く

Scriptフォルダの中に「C# スクリプト」を新規作成し、名前を入力して確定します。今回は「SEController」としました。

スクリプト:SEControllerを開き、以下のようにスクリプトを書きます。

1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class SEController : MonoBehaviour
6 {
7    [SerializeField] private AudioClip _se00; // AudioClip変数:_se00を定義
8    [SerializeField] private AudioClip _se01; // AudioClip変数:_se01を定義
9    [SerializeField] private AudioClip _se02; // AudioClip変数:_se02を定義
10
11   AudioSource audioSource; // AudioSource変数:audioSourceを定義
12
13  void Start()
14  {
15      // このスクリプトがアタッチされているGameObjectのAudio Sourceコンポーネントを取得
16      audioSource = GetComponent<AudioSource>();
17  }
18
19  public void OnClick00()
20  {
21      audioSource.PlayOneShot(_se00); // 一度だけ_se00を鳴らす
22  }
23
24  public void OnClick01()
25  {
26      audioSource.PlayOneShot(_se01); // 一度だけse01を鳴らす
27  }
28
29  public void OnClick02()
30  {
31      audioSource.PlayOneShot(_se02); // 一度だけse02を鳴らす
32  }
33 }

7行目から9行目で「AudioClip変数:_se00, _se01, _se02」を定義しています
これで、このスクリプトをアタッチするゲームオブジェクトのInspectorウインドウに、3つの音声ファイルをセットできるようになります。

11行目で「AudioSource変数:audioSource」を定義しています

更に、13行目から17行目までのStartメソッドの中で以下の処理を行い、このスクリプトをアタッチするゲームオブジェクトのAudio Sourceコンポーネントを操作できるようにしています。

Startメソッドで行っている処理

audioSource = GetComponent<AudioSource>();
→「AudioSouce変数:audioSource」に、このスクリプトをアタッチするゲームオフジェクトのAudio Sourceコンポーネントを取得して代入(= Audio Sourceコンポーネントを操作できる)。

19行目から22行目の「OnClick00メソッド」は「AudioClip変数:_se00」にセットした音声ファイルを、一度だけ鳴らす処理を呼び出します。

AudioSource.PlayOneShotとは・・・

AudioSource.PlayOneShotは、AudioClipを一度だけ再生する。

同様に、24行目から27行目の「OnClick01メソッド」は「AudioClip変数:_se01」にセットした音声ファイルを、29行目から32行目の「OnClick02メソッド」は「AudioClip変数:_se02」にセットした音声ファイルを、それぞれ一度だけ鳴らす処理を呼び出します。

スクリプトをアタッチする

スクリプト:SEController」をアタッチするゲームオブジェクトを作成します。

Hierarchyウインドウ左上の「+」をクリックし、コンテキストメニューから「Create Empty」を選んでクリックします。空のゲームオブジェクトが作成されるので、名前を入力して確定します。
ここでは「SE」としました。

「スクリプト:SEController」をアタッチするために「空のゲームオブジェクト:SE」を作成

Create Emptyで空のゲームオブジェクトを作成
空のゲームオブジェクト
:SE

Hierarchyウインドウで「ゲームオブジェクト:SE」を選択し、Inspectorウインドウの「Add Component」で「Audio」と入力して、Audio Sourceコンポーネントを追加します。
更に「SE」と入力して「スクリプト:SEController」をアタッチします

変数se00, se01, se02に音声ファイルをセットする
ゲームオブジェクト:SEの各種設定

SE Controller(Script)

  • Se 00:音声ファイルを参照(ボタン・脱出口クリック音)
  • Se 01:音声ファイルを参照(アイテム入手音)
  • Se 02:音声ファイルを参照(脱出口出現音)

Audio Sourceコンポーネント

  • Play On Awake:チェックを外す
  • Volume:必要に応じて調整
  • Spatial Blend:0.0で2D音声、1.0で3D音声。今回は2Dゲームなので「0.0」設定

ゲームオブジェクトごとにOnClickイベントでメソッドを呼び出す

今回作成するゲームでは、下図のような仕組みでSEを鳴らします。

SEを鳴らすスクリプト:SEControllerを作成し、それを空のゲームオブジェクト:SEにアタッチ。AudioSource変数:_se00, _se01, _se02に、音声ファイルを参照させたところまで完了しています。

これから、ボタンやアイテム・脱出口でOnClickイベントが発生した際、スクリプト:SEControllerの中にあるOnClick00, 01, 02メソッドの中から、適切なメソッドを呼び出せるように設定していきます

SEを鳴らす仕組み

アイテムクリック音を設定する

Room1, Room2, Room3に1つずつ配置しているアイテム(Candy)にクリック音を設定します。

Candy1にクリック音を設定する手順
  1. Candy1に「Buttonコンポーネント」を追加する
  2. OnClickイベントに「空のゲームオブジェクト:SE」を参照させる
  3. OnClickイベントに「OnClick01メソッド」をセットする

UI >Image で配置したcandy.pngにはButtonコンポーネントがないので、inspectorウインドウの「Add Component」からButtonコンポーネントを追加します

すると、OnClickイベントを使えるようになるので「None(Object)」に「空のゲームオブジェクト:SE」をドラッグ&ドロップします

さらに「No Function」でドロップダウンメニューから「SEController > OnClick01」を選んでクリックします

Room1 のCandy1にOnClick01メソッドを設定した

candy.pngのOnClickイベント

Room2のCandy2・Room3のCandy3にも、同様にアイテムクリック音を設定してください。
設定ができたら、再生モードでプロジェクトを実行し、クリック音が鳴ることを確認しましょう!

脱出口クリック音を設定する

Room1に配置している脱出口(Exit)にクリック音を設定します。

手順はCandyにクリック音を設定した時と全く同じです。ただ、OnClickイベントにセットするのは「OnClick00メソッド」となります。

こちらも、設定ができたら再生モードにして、クリック音が鳴ることを確認してください。

ゆくすぃ

OnClick02メソッド(=脱出口出現音)の設定がまだですが、こちらは脱出に必要なアイテムが揃った(=脱出条件達成)と同時に鳴らしたいので、第9回に持ち越します!

ボタンクリック音を設定する

「ボタン:Game Start」「ボタン:Play Again」にクリック音を設定します。
アイテム(Candy)や脱出口(Exit)とは別の方法でやってみましょう。

まずは、TitleSceneを開きます。
Hierarchyウインドウで「+」をクリックし「Audio >Audio Source」を選んでクリックします。Audio Sourceが追加されるので、名前を入力して確定します。
今回は「Audio」としました。

HierarchyウインドウでAudio Sourceを追加

AudioのAudio Sourceコンポーネントは以下の通りです。デフォルトで入っているPlay On Awake」のチェックは外しています

Audio Sourceコンポーネントの様子

Hierarchyウインドウで「ボタン:Game Start」を選択し、inspectorウインドウのOnClickイベントで「Add to the list」をクリックします。

None(Object)」にHierarchyウインドウから「Audio」をドラッグ&ドロップします。

No Function」でドロップダウンメニューから「AudioSource >PlayOneShot」を選んでクリックします。

None(Audio Clip)」に鳴らしたい音声ファイルを参照させます。

OnClickイベントにセットする

以上で、ボタンクリック音の設定は完了です。設定後に、再生モードで音が鳴ることを確認します。
同様にClearSceneでも設定してください。

まとめ

今回の記事では、BGM・SEの設定について解説しました。
シーンが読み込まれた直後から自動的に音を鳴らす方法、スクリプトを使って音を鳴らし分ける方法、スクリプトを使わずに音を鳴らす方法・・・音を鳴らすだけでこんなに選択肢があるのですから、知識を得れば得るだけ、ゲーム開発は効率良くエレガントになるわけです!

次回は、【第8回】超入門!Unityで2D脱出ゲームを作ろう!「アイテムの入手編」です。

以上、最後まで読んでいただき有難うございました!

よかったらシェアしてね!
  • URLをコピーしました!
目次