コガネブログさんの「【Unity 入門】全方位シューティングを作る」というサイトのチュートリアルをやってみるシリーズの11回目です。前回は宝石アイテムの当たり判定と挙動の実装を行いました。
Unity全方位2Dシューティングチュートリアル10回目。宝石の当たり判定
今回はBGMの実装ですが、別にC#のコードを書くわけではないので簡単そうです。それではやっていきましょう。
16.BGMの実装
ここでやること
- 空のゲームオブジェクトを作成
- 作ったゲームオブジェクトに「AudioSoure」コンポーネントを追加
- 「AudioClip」にソースとなる音楽を追加
- Loopにチェックを入れる
BGMオブジェクトをつくろう
さきほどの手順は細かく分解しましたが、やること自体は大した作業ではなく地味な作業ですのでどんどんやっていきましょう。
- hierarkhyのcreateからCreate Emptyを選択
- 空のゲームオブジェクトに「AudioManager」と名前をつける
- AudioManagerに「AudioSource」コンポーネントを追加
- AudioClipに音楽をアタッチ
- Loopにチェックを入れる
音楽素材に関しては最初にAssetStroeから素材一式をダウンロードしているのでそれを使いました。
ここまでの状態
画像のみですが音でるようなってます。音楽出すためのコードとか書かなくてよいので楽です。
17.効果音の実装
つづいて効果音も実装していきます。効果音に関してはちょっとコードの追加も必要ですが、パラメーターを追加する感覚でコードも決まり文句っぽい感じなのでどんどんやっていきます。
ここでやること
- PlayerScirptにダメージをうけたとき効果音を発生させるコードを追加
- EnemyScriptに敵を倒したときのコードを追加
- GemScriptに宝石を取得したときのコードを追加
- それぞれのオブジェクトに効果音をアタッチ
PlayerScriptにコード追加
新しく効果音用の変数を定義します。
public AudioClip m_damageClip; // ダメージを受けた時に再生する SE
PlayerScriptのDamage 関数の先頭に以下のコードを追加します。
// ダメージを受けた時の SE を再生する var audioSource = FindObjectOfType<AudioSource>(); audioSource.PlayOneShot( m_damageClip );
EnemyScriptにコードを追加
変数を定義
public AudioClip m_deathClip; // 敵を倒した時に再生する SE
OnTriggerEnter2D 関数の
if(collision.name.Contains(“BulletPrefab”))の中の
if (0 < m_hp) return; の下に下記のコードを追加。
// 敵を倒した時の SE を再生する var audioSource = FindObjectOfType<AudioSource>(); audioSource.PlayOneShot( m_deathClip );
GemScriptにコードを追加
public AudioClip m_goldClip; // 宝石を取得した時に再生する SE
OnTriggerEnter2D 関数の最後に追加
// 宝石を取得した時の SE を再生する var audioSource = FindObjectOfType<AudioSource>(); audioSource.PlayOneShot( m_goldClip );
効果音をアタッチ
それぞれのオブジェクトに変数を定義したので効果音をアタッチできるようになっています。ただアタッチしてくだけなのですが、なかなか量がおおいです。効果音素材はAssetStoreからimportしたフォルダのsoundsフォルダに入っています。
Playerと敵が死んだときの効果音は「death」をアタッチしています。宝石を取得したときの効果音は「gold-1~gold-4」をアタッチしています。敵オブジェクトに関しては全部同じ効果音素材を使うのでShiftを使った複数選択のテクニックを使うとよいでしょう
ここまでの状態
効果音のアタッチに関しては結構はしょってしまいましたが、以下がすべて作業を終えた状態です。自機、敵、宝石オブジェクトに効果音をアタッチした状態です。画像のみですが、たしかに効果音がでるようになってます。
コメント