【Unity】チュートリアルの「Roll a Ball」をやってみる話 #10
記事をご覧いただき、誠に有難うございます。
投稿主の無能です。
今回は、BGMをや効果音(SE)を付けたいと思います。
BGMを付ける
やはり、ゲームにはBGMが無いと寂しいですよね。
ということで、BGMを付けてみます。
オーディオの操作に必要なコンポーネント
一口にBGMを付けると言っても、必要なコンポーネントがあるので、まずはそこを押さえます。
現実世界では、オーディオを聞くには何が必要でしょうか?
そう、人間の「耳」です。
そして、日常生活は実に多種多様な音が溢れていますよね。
これらは様々な方向から様々な音量で、様々な方法で耳に入ります。
つまり伝達方法は色々あれど音の素となる「音源」がある、という事です。
オーディオを操作する際に必要なコンポーネントは
- 音源:Audio Source(オーディオソース)
- 耳:Audio Listener(オーディオリスナー)
の2つになります。
そして耳となるAudio Listenerは、Main Cameraにデフォルトでしっかりアタッチされています。
Audio ListenerはMain Cameraにデフォルトでしっかりアタッチされている
BGMはスクリプトは必要ありませんので、早速やってみましょう。
BGMを流すオブジェクトを用意する
空のオブジェクトを「SoundManager」という名前で用意して、このオブジェクトからBGMが流れるようにします。
メニュー Game Object > Create Empty
「SoundManager」を作成
Transformのリセットを忘れずにする
次にAudio Sourceをアタッチします。
Inspectorビューの下のAdd Componentボタンを押し、Audio > Audio Source を選択します。
Add Componentボタンを押す
Audioを選択
Audio Sourceを選択
Audio Sourceが追加されました。
Audio Sourceが追加された
今回はフリーのBGM素材を提供してくださっている甘茶の音楽工房よりBGM素材を使わせていただきます。
甘茶の音楽工房:https://amachamusic.chagasi.com/
甘茶の音楽工房
今回はテクノ・エレクトロのジャンルからフルーツパフェというBGMを使わせていただきます。
BGMをダウンロードしたら、Unityに戻りProjectビューのAssetsフォルダに「Sounds」という名前で、フォルダを新規作成します。
ProjectビューのAssetsフォルダに「Sounds」という名前でフォルダを新規作成する
Soundsフォルダ内に「BGM」と「SE」の二つのフォルダを新規作成する
BGMフォルダ内に先程ダウンロードしたBGMを入れる
BGMを流して設定する
HierarchyビューのSoundManagerを選択し、Audio Sourceの中のAudio Clipに先程のBGMを設定します。
SoundManagerを選択し、Audio Source内のAudio Clipに先程のBGMを設定する
ではゲームを実行して確かめましょう。
確認の為にBGMが終了してから15秒ほど待ってからゲームを終了します。
ちょっと音量が大きいですね。
これでは効果音が聞こえなさそうです。
あとはBGMがループせず、BGMが終了したら無音になりましたね。
この2つの問題を解決していきます。
音量の調整
音量はVolumeで設定します。
音量の設定
ゲーム終了時に値が破棄されるので、改めて設定し直します。
今回は0.15にしました。
音量を0.15に調整
ゲームを実行して確認します。
理想通りのBGMができたと思います。
これでBGMの設定が完了しました。
これで編集が完了しました。
因みに、ループが不自然な場合は、編集ソフトなどでBGMの余白をカットするなどして、ループした際に違和感が無いようにします。
トップページでファイルをドラッグ&ドロップします。
すると、編集する音声ファイルが自動的に読み込まれて、音声ファイルの波形が表示されます。
デフォルトではTrim(トリム)になっています。
この状態で、波形の両端にある水色のバーを動かして、ドリブルが一度だけ聞こえるようにします。
更に保存ボタンを押すと、編集した音声ファイルがダウンロードできます。
次に効果音(SE)を設定していきます。
効果音(SE)をつける
効果音(SE)は、幾つか種類が必要です。
今回のRoll a Ball(玉転がし)だと
- 収集アイテムを取得した時
- Playerが壁にぶつかった時
- ステージをクリアした時
と、ざっと考えてこの3つが挙げられます。
そして、少しスクリプトを記述する必要が出てきます。
何はともあれ、早速やっていきましょう。
効果音(SE)を探しに行く
今回は効果音ラボで効果音を探してみます。
このサイトも高品質なSEの素材を無料で提供してくださっています。
今回は次の効果音を使います。
- ステージクリア:決定ボタンを押す30(ボタン・システム音)
- 収集アイテムを収録した時:ぷよん(演出・アニメ)
- Playerが壁にぶつかった時:バスケットのドリブル(生活[3])
この3つのうち、バスケットのドリブルだけが加工が必要になります。
ドリブルは一度だけではないので、ぶつかった時に一度だけドリブルの音を鳴らすように効果音を編集します。
online MP3 Cutter:https://mp3cut.net/ja/
このサイトは無料でアカウント登録が不要なので、いきなり編集が可能です。
online MP3 Cutter
編集する音声ファイルをドラッグ&ドロップする
音声ファイルの波形が表示される
デフォルトでTrim(トリム)になっている
下の再生ボタンで音声を聞きながら調整してください。
デフォルトでMP3になっています。
保存ボタンを押して音声ファイルをダウンロードする
実際に編集した音声ファイルをPCで再生して確認します。
問題無ければ、効果音の素材調達は完了です。
次に、効果音をそれぞれ付けていきます。
効果音を付けていく
調達した効果音を付けていきます。
先に効果音をインポートします。
ProjectビューのSoundsフォルダ内の、作成したSEフォルダ内に入れていきます。
Soundsフォルダ内に作成したSEフォルダ内に入れていく
今回はこのようにしました。
念のためファイル名を半角英字に変更
まずは簡単なステージクリアからやっていきます。
ステージクリアの効果音を付ける
ステージクリアの効果音は、スクリプトの記述は不要です。
まずはAudio Sourceを追加します。
UI_GameStatusの子オブジェクトのStageClearに、Audio Sourceを追加します。
StageClearにAudio Sourceを追加
設定の際に、Play On Awakeにチェックが入っていることを確認してください。
Audio Clipに音声ファイルを設定する
ステージクリアの確認なので、収集アイテムを全て取得します。
Gameビュー
次に、壁にぶつかった時の効果音を設定します。
壁にぶつかった時の効果音を付ける
壁にぶつかった時の効果音を付けます。
ProjectビューのPrefabsフォルダにあるWallにAudio Sourceを追加します。
PrefabsフォルダにあるWallにAudio Sourceを追加
この際に、Play On Awakeのチェックを外してください。
Play On Awakeは、ゲームが開始されてこのオブジェクトがアクティブになった時に自動的に音を再生する項目なので、チェックを外してスクリプトから操作します。
Audio Clipに音声ファイルを設定し、Play On Awakeのチェックを外す
ではスクリプトを記述していきます。
スクリプトは「WallController」という名前で新規作成し、PrefabsフォルダにあるWallにアタッチします。
「WallController」という名前で新規作成
WallControllerスクリプトでは、まずAudioClipの変数とAudioSourceの変数を用意します。
このような記述になります。
public class WallController : MonoBehaviour
{
// 壁にぶつかった時のSE
public AudioClip wallSE;
// 再生するAudioSource
private AudioSource audioSource;
}
このような記述になります。
private void Start()
{
// audioSourceのコンポーネントを取得
audioSource = GetComponent<audiosource>();
}
このようになります。
このような記述になります。
private void OnCollisionEnter(Collision collision)
{
// Playerが接触したら
if (collision.gameObject.CompareTag("Player"))
{
// wallSEを再生
audioSource.PlayOneShot(wallSE);
}
}このようになります。
このPlayOneShotは銃声や車のスリップ音など、重複して再生される音声に使用します。
逆にPlayでは音声の重複が出来ないので、BGMなどに使われます。
ではスクリプトを保存してUnityに戻ります。
ProjectビューのPrefabsフォルダにあるWallに、Wall SEの項目が追加されているので、音声ファイルを設定します。
WallびWall SEという項目が追加された
Wall SEに音声ファイルを設定
Wallにぶつかった時に音が出るか確認します。
Gameビュー
最後に、収集アイテムを取得した時の効果音を付けます。
収集アイテムを取得した時の効果音を付ける
アイテムを取得した時の効果音も、Wallと同様にスクリプトを記述していきます。
はじめに、PrefabsフォルダにあるCollectItemにAudio Sourceを追加します。
CollectItemにAudio Sourceを追加
次に、CollectItemControllerスクリプトをVSで開きます。
このスクリプトに、収集アイテムを取得した時の音を再生する仕組みを記述します。
変数にitemSEとしてAudioClipを追加します。
ではゲームを実行して確認しましょう。
アイテム取得時に音が再生されました!
このような記述になります。
// アイテム取得時のSE
public AudioClip itemSE;
どうして?となりますが、PlayOneShotで音を再生しようとしているときに、オブジェクトをDestroyで破棄されるからです。
ではスクリプトを保存して、Unityに戻ります。
PlayOneShotで音を再生する前にオブジェクトが破棄されるので音が再生されない、という状況に陥ります。
PlayClipAtPointは、引き数として再生するAudioClipの後に、Vector3で場所を指定しています。
このVector3で指定した場所で音が再生されるので、オブジェクトが破棄されていても音が鳴る、ということが実現できます。
このような記述になります。
// アイテム取得時にSEを再生
AudioSource.PlayClipAtPoint(itemSE, transform.position);
このようになります。
PrefabsフォルダにあるCollectItemにItem SEの項目が追加されたのでここに音声ファイルを設定します。
Item SEの項目が追加された
アイテム取得時の効果音を設定
アイテム取得時に音が再生されるかを確認します。
Gameビュー
今回はここまで。
まとめ
本記事では
- BGMを探してきて、Audio SourceでBGMを再生した
- 効果音を探してきて音声ファイルを編集した
- スクリプトを記述して効果音が鳴る仕組みを作った
という事を行いました。
次は、現状だとゲームオーバーが無いため絶対にクリアできるゲームになっているので、制限時間を設けてみたいと思います。
本記事もご覧頂き、誠に有難うございます。
ではまた。















































コメント
コメントを投稿