Unityの入門書で通称”ヒヨコ本”として親しまれている”Unity5入門 最新開発環境による簡単3D&2Dゲーム制作 “の作例に色々とゲーム要素を追加してオリジナルゲームに仕上げる内容を連載中。
ゲームの効果音を設定する
今回はChapter3の作例にボタンクリックの効果音やオブジェクトが衝突した際の効果音を追加してみたいと思います。
効果音アセットのダウンロード
あらかじめ効果音を用意しておきましょう。今回はアセットストアから無料の効果音アセットFREE Casual Game SFX Pack を使用します。
Unityのプロジェクトにインポートして[Projectウィンドウでみるとこんな感じ。50個のオーディオファイルとライセンスのPDFファイルがあります。
必要な効果音と処理方法を考える
スクリプトを編集する前に効果音を割り当てる変数と関数を考えて下記のようになりました。
- ボタンクリックの効果音
- プレイヤーの操作:ボタンクリックで再生
- ボールが衝突した時の効果音
- ボールの物理挙動に応じて再生
というわけで、プレイヤー操作で再生する効果音の制御と、ボールの物理挙動に応じて再生する効果音の制御を別々のスクリプトに分けることにしました。
ボタンクリックで再生する効果音を制御するスクリプトを作成
まずは効果音管理用のスクリプトを作成します。こちらの記事で作成したサウンド管理用オブジェクトにスクリプトを作成してアタッチします。
[Hierarchy]ウィンドウ > SoundManager を選択。[Inspector]ウィンドウ > [Add Component]ボタン > New Scriptを選択して下記の通り入力。[Create and Add]ボタンをクリック。Name: SfxManager / Language: C Sharp
スクリプトの編集
[Hierarchy]ウィンドウ > SoundManagerを選択。[Inspector]ウィンドウ > “Sfx Manager (Script)”コンポーネントパネルの右上にある 歯車アイコンをクリック > Edit Script を選択してエディタを起動。下記の通りコードを入力します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SfxManager : MonoBehaviour { // "AudioSource"コンポーネントを格納する変数 private AudioSource audioSource; // ボタンをクリックした時に再生するオーディオクリップを格納する変数 public AudioClip buttonSfx; // ゲームの初期化 void Start() { // "AudioSource"コンポーネントを変数"audioSource"に格納する audioSource = GetComponent<AudioSource>(); // オーディオファイルを再生する audioSource.Play(); } // ボタンをクリックした時に効果音を再生する処理 public void ButtonSfx() { // オーディオファイルを再生する audioSource.PlayOneShot(buttonSfx); } }
オーディオクリップをコンポーネントに割り当て
スクリプトを保存したらコンポーネントの変数フィールドにオーディオクリップを割り当てます。今回は下記の通りになりました。
スタートボタンのクリック音を設定する
[Hierarchy]ウィンドウ > Canvas > Title > Button Start を選択。[Inspector]ウィンドウで Button (Script)コンポーネント > On Clock() パネルの [+]ボタンをクリック。オブジェクト”SoundManager”を割り当て、関数は SoundManager > ButtonSfx を選択します。リトライボタンのクリック音を設定する
[Hierarchy]ウィンドウ > Canvas > GameOver > Button Retry を選択。[Inspector]ウィンドウで Button (Script)コンポーネント > On Clock() パネルの [+]ボタンをクリック。オブジェクト”SoundManager”を割り当て、関数は SoundManager > ButtonSfx を選択します。動作確認
ここでいったん動作確認をしておきましょう。前回の記事の手順でミュートボタンを配置しているのでゲームを再生したらチェックボックスをオンにします。
スタートボタンとリトライボタンをクリックして音が鳴っていればOKです。
ボールの物理挙動に応じて再生する制御するスクリプトを作成
今回は[Project]ウィンドウからボールPrefabを選択してスクリプトを作成します。
[Project]ウィンドウ > Ball を選択。[Inspector]ウィンドウ > [Add Component]ボタン > New Scriptを選択して下記の通り入力。[Create and Add]ボタンをクリック。Name: PlaySfx / Language: C Sharp
スクリプトの編集
[Hierarchy]ウィンドウ > SoundManagerを選択。[Inspector]ウィンドウ > “PlaySfx (Script)”コンポーネントパネルの右上にある 歯車アイコンをクリック > Edit Script を選択してエディタを起動。下記の通りコードを入力します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlaySfx : MonoBehaviour { // ボールが衝突する時に再生するオーディオクリップを格納する変数 public AudioClip hitSfx; // "AudioSource"コンポーネントを格納する変数 private AudioSource audioSource; // ボールオブジェクトの"Rigidbody"コンポーネントを格納 private Rigidbody rigid; // ゲームの初期化 void Start() { // "AudioSource"コンポーネントを変数"audioSource"に格納する audioSource = GetComponent<AudioSource>(); } // オブジェクトが接触した時の処理 void OnCollisionEnter(Collision collision) { // ボールが衝突した時のサウンドを再生 audioSource.PlayOneShot(hitSfx); } }
ボールが衝突した時の効果音を設定する
スクリプトが完成したらコンポーネントの変数フィールドにオーディオクリップを割り当てます。[Project]ウィンドウからオーディオクリップをドラッグ&ドロップ。
Audio Sourceコンポーネントを追加
最後に、オブジェクト”Ball”にオーディオファイルを再生するためのAudio Sourceコンポーネントを追加します。
[Hierarchy]ウィンドウ > SoundManagerを選択。[Inspector]ウィンドウ > [Add Component]ボタン > Audio > Audio Source を選択。
WebGLビルド
ここまでの内容をWebGLビルドしてみました。ボールの衝突音が付いただけでも雰囲気が変わりますね。
unityroomのゲーム更新
unityroom で公開しているゲームファイルもあわせて更新しました。