【Unity】チュートリアルの「Roll a Ball」をやってみる話 #10

記事をご覧いただき、誠に有難うございます。

投稿主の無能です。

今回は、BGMをや効果音(SE)を付けたいと思います。


BGMを付ける

やはり、ゲームにはBGMが無いと寂しいですよね。
ということで、BGMを付けてみます。

オーディオの操作に必要なコンポーネント

一口にBGMを付けると言っても、必要なコンポーネントがあるので、まずはそこを押さえます。

現実世界では、オーディオを聞くには何が必要でしょうか?
そう、人間の「耳」です。

そして、日常生活は実に多種多様な音が溢れていますよね。
これらは様々な方向から様々な音量で、様々な方法で耳に入ります。
つまり伝達方法は色々あれど音の素となる「音源」がある、という事です。

オーディオを操作する際に必要なコンポーネントは
  • 音源:Audio Source(オーディオソース)
  • 耳:Audio Listener(オーディオリスナー)
の2つになります。

そして耳となるAudio Listenerは、Main Cameraにデフォルトでしっかりアタッチされています。

Audio ListenerはMain Cameraにデフォルトでしっかりアタッチされている

という事で、あとは音源となるAudio Sourceを用意すればBGMが用意できるわけですね。

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素材を提供してくださっている甘茶の音楽工房よりBGM素材を使わせていただきます。
甘茶の音楽工房:https://amachamusic.chagasi.com/

甘茶の音楽工房

BGMは自由に選びましょう。
今回はテクノ・エレクトロのジャンルからフルーツパフェというBGMを使わせていただきます。

BGMをダウンロードしたら、Unityに戻りProjectビューのAssetsフォルダに「Sounds」という名前で、フォルダを新規作成します。

ProjectビューのAssetsフォルダに「Sounds」という名前でフォルダを新規作成する

さらにSoundsフォルダ内に「BGM」と「SE」の二つのフォルダを新規作成します。

Soundsフォルダ内に「BGM」と「SE」の二つのフォルダを新規作成する

これからBGMを設定するので、まずはBGMフォルダ内に先程ダウンロードしたBGMを入れます。

BGMフォルダ内に先程ダウンロードしたBGMを入れる

ちなみにBGMを複数ダウンロードした場合に、どれがどんな曲だったか分からなくなるときがあります。

そういう場合は、Inspectorビューの下にあるファイル名をクリックすると再生できるようになります。


では、このBGMをAudio Sourceに追加します。

BGMを流して設定する

HierarchyビューのSoundManagerを選択し、Audio Sourceの中のAudio Clipに先程のBGMを設定します。

SoundManagerを選択し、Audio Source内のAudio Clipに先程のBGMを設定する


BGMを流すだけならこれで完了です。

ではゲームを実行して確かめましょう。
確認の為にBGMが終了してから15秒ほど待ってからゲームを終了します。

ちょっと音量が大きいですね。
これでは効果音が聞こえなさそうです。

あとはBGMがループせず、BGMが終了したら無音になりましたね。

この2つの問題を解決していきます。

音量の調整

音量はVolumeで設定します。

音量の設定

ゲームを実行しながら音量を調整し丁度良いところの数値を覚えておきましょう。
ゲーム終了時に値が破棄されるので、改めて設定し直します。
今回は0.15にしました。

音量を0.15に調整

次にループですが、Loopにチェックを入れるだけです。


Loopにチェックを入れる

これでBGMの音量とループ設定ができました。
ゲームを実行して確認します。

理想通りのBGMができたと思います。
これでBGMの設定が完了しました。

因みに、ループが不自然な場合は、編集ソフトなどでBGMの余白をカットするなどして、ループした際に違和感が無いようにします。

次に効果音(SE)を設定していきます。

効果音(SE)をつける

効果音(SE)は、幾つか種類が必要です。
今回のRoll a Ball(玉転がし)だと
  • 収集アイテムを取得した時
  • Playerが壁にぶつかった時
  • ステージをクリアした時
と、ざっと考えてこの3つが挙げられます。

そして、少しスクリプトを記述する必要が出てきます。

何はともあれ、早速やっていきましょう。

効果音(SE)を探しに行く

今回は効果音ラボで効果音を探してみます。
このサイトも高品質なSEの素材を無料で提供してくださっています。
効果音ラボ:https://soundeffect-lab.info/

効果音ラボ

先程の3つの効果音を探しましょう。
今回は次の効果音を使います。
  • ステージクリア:決定ボタンを押す30(ボタン・システム音)
  • 収集アイテムを収録した時:ぷよん(演出・アニメ)
  • Playerが壁にぶつかった時:バスケットのドリブル(生活[3])
この3つのうち、バスケットのドリブルだけが加工が必要になります。

ドリブルは一度だけではないので、ぶつかった時に一度だけドリブルの音を鳴らすように効果音を編集します。

効果音を編集する

今回はonline MP3 Cutterというオンライン上で音声ファイルが編集できるサイトで編集します。
online MP3 Cutter:https://mp3cut.net/ja/

このサイトは無料でアカウント登録が不要なので、いきなり編集が可能です。

online MP3 Cutter

トップページでファイルをドラッグ&ドロップします。

編集する音声ファイルをドラッグ&ドロップする

すると、編集する音声ファイルが自動的に読み込まれて、音声ファイルの波形が表示されます。

音声ファイルの波形が表示される

デフォルトではTrim(トリム)になっています。

デフォルトでTrim(トリム)になっている

この状態で、波形の両端にある水色のバーを動かして、ドリブルが一度だけ聞こえるようにします。
下の再生ボタンで音声を聞きながら調整してください。

両端のバーを動かして調整する

調整が完了したら、音声ファイルの形式を選択して保存ボタンを押します。
デフォルトでMP3になっています。


更に保存ボタンを押すと、編集した音声ファイルがダウンロードできます。

保存ボタンを押して音声ファイルをダウンロードする

これで編集が完了しました。
実際に編集した音声ファイルをPCで再生して確認します。

問題無ければ、効果音の素材調達は完了です。

次に、効果音をそれぞれ付けていきます。

効果音を付けていく

調達した効果音を付けていきます。

先に効果音をインポートします。
ProjectビューのSoundsフォルダ内の、作成したSEフォルダ内に入れていきます。

Soundsフォルダ内に作成したSEフォルダ内に入れていく

ここで、杞憂だとは思いますが、ファイル名に日本語が含まれているので名前を変更します。
今回はこのようにしました。

念のためファイル名を半角英字に変更

これで効果音のファイルがインポートできました。

まずは簡単なステージクリアからやっていきます。

ステージクリアの効果音を付ける

ステージクリアの効果音は、スクリプトの記述は不要です。

まずはAudio Sourceを追加します。
UI_GameStatusの子オブジェクトのStageClearに、Audio Sourceを追加します。

StageClearにAudio Sourceを追加

そしてAudio Clipに音声ファイルを設定します。
設定の際に、Play On Awakeにチェックが入っていることを確認してください。

Audio Clipに音声ファイルを設定する

それではゲームを実行して確認します。
ステージクリアの確認なので、収集アイテムを全て取得します。

Gameビュー

無事に効果音がなりました。

次に、壁にぶつかった時の効果音を設定します。

壁にぶつかった時の効果音を付ける

壁にぶつかった時の効果音を付けます。

ProjectビューのPrefabsフォルダにあるWallにAudio Sourceを追加します。

PrefabsフォルダにあるWallにAudio Sourceを追加

Audio Clipに効果音を設定します。
この際に、Play On Awakeのチェックを外してください。

Play On Awakeは、ゲームが開始されてこのオブジェクトがアクティブになった時に自動的に音を再生する項目なので、チェックを外してスクリプトから操作します。

Audio Clipに音声ファイルを設定し、Play On Awakeのチェックを外す

ではスクリプトを記述していきます。

スクリプトは「WallController」という名前で新規作成し、PrefabsフォルダにあるWallにアタッチします。

「WallController」という名前で新規作成


ではWallControllerスクリプトをVSで開きます。

WallControllerスクリプトでは、まずAudioClipの変数とAudioSourceの変数を用意します。
このような記述になります。

public class WallController : MonoBehaviour
{
    // 壁にぶつかった時のSE
    public AudioClip wallSE;
    // 再生するAudioSource
    private AudioSource audioSource;

}

このようになります。


次にStart関数を用意し、変数audioSourceのコンポーネントを取得します。
このような記述になります。

    private void Start()
    {
        // audioSourceのコンポーネントを取得
        audioSource = GetComponent<audiosource>();
    }

このようになります。


次にOnCollisionEnter関数を用意して、PlayerがWallに接触したらwallSEが再生される、という処理を記述します。
このような記述になります。

    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は使えません。
どうして?となりますが、PlayOneShotで音を再生しようとしているときに、オブジェクトをDestroyで破棄されるからです。

PlayOneShotで音を再生する前にオブジェクトが破棄されるので音が再生されない、という状況に陥ります。

PlayClipAtPointは、引き数として再生するAudioClipの後に、Vector3で場所を指定しています。
このVector3で指定した場所で音が再生されるので、オブジェクトが破棄されていても音が鳴る、ということが実現できます。

このような記述になります。

            // アイテム取得時にSEを再生
            AudioSource.PlayClipAtPoint(itemSE, transform.position);

このようになります。


ではスクリプトを保存して、Unityに戻ります。

PrefabsフォルダにあるCollectItemにItem SEの項目が追加されたのでここに音声ファイルを設定します。

Item SEの項目が追加された

アイテム取得時の効果音を設定

ではゲームを実行して確認しましょう。
アイテム取得時に音が再生されるかを確認します。

Gameビュー

アイテム取得時に音が再生されました!

今回はここまで。


まとめ

本記事では
  • BGMを探してきて、Audio SourceでBGMを再生した
  • 効果音を探してきて音声ファイルを編集した
  • スクリプトを記述して効果音が鳴る仕組みを作った
という事を行いました。

次は、現状だとゲームオーバーが無いため絶対にクリアできるゲームになっているので、制限時間を設けてみたいと思います。


本記事もご覧頂き、誠に有難うございます。
ではまた。



コメント