今回は、Unity C# 音ゲーの作り方講座の第6回目ではノーツの役割を持つmusicboxゲームオブジェクトが音を鳴らして消える処理をチュートリアル形式で作っていきます。
前回の記事「Unity C# 音ゲーの作り方5 音ノーツが自動で流れるようにする/ボタンの仕組みを作成しよう」の続きを作っていきます。
まず、collisionboxとmusicboxを衝突させ、当たり判定を実装するためにコンポーネントの『Rigidbody』を活用します。
そして衝突したら音を鳴らしてノーツを消すスクリプトを作成していく流れです。
音ゲーのmusicboxにRigidbodyを付けてcollisonboxに衝突させよう
『Rigidbody』とは、オブジェクトに質量や抵抗力、重力などの物理的な特性を与えるコンポーネントです。
初期状態のオブジェクトは、他のオブジェクトに近づいてもすり抜けてしまいます。物理的な特性を持つと他のオブジェクトに当たった時に衝突します。これを当たり判定と言います。
それでは、musicboxに『Rigidbody』を追加していきましょう。
ヒエラルキーの中にある『musicbox.pink』の『>』を選択してください。
インスペクターの下にある『コンポーネントを追加』→『Physics』→『Rigidbody』を選択してください。
追加するとインスペクターに『Rigidbody』という項目が出てきますので以下のように内容を変更してください。
これで1つ目の『Rigidbody』の設定ができました。
ヒエラルキーにある『musicbox.pink』の『<』を選択して戻ります。
同じやり方で残り4つの『musicbox』オブジェクトにも『Rigidbody』を追加してください。
音ゲーのmusicboxの音を鳴らして消える仕組みを作ろう
それでは、『musicbox』と『collisionbox』が衝突した時の音を鳴らして消える仕組みについて説明していきます。
まず初めに衝突した時に鳴る音源をUnityに追加していきます。
『Assets』フォルダーの中に『Sound』フォルダーを作成してください。
以下の音源をダウンロードして『Sound』フォルダーの中にドロップさせてください。BGMとなる『shiningstar』音源もドロップさせます。
該当音源を右クリック→リンク先を保存で保存してください。
今回の講座では魔王魂様の音楽素材を使わせていただきました。他の音源に差し替えて使いたい方は参考にしてみてください。
Unityで音源ファイルをしようする時は、ファイル形式をwavにしてください。wav以外の場合、再生しても音が鳴らない可能性があります。
先にBGMの設定を行っていきます。
ヒエラルキーの中にある『MainCamera』を選択してください。
インスペクターにあるの『コンポーネントを追加』→『Audio』→『Audio Source』を選択してください。
『AudioSource』にある『オーディオクリップ』の◉を選択してBGM音源の『shining star』を選択してボリュームを『0.218』に設定してください。
『AudioSource』とは、音楽を再生する際の再生装置となる機能です。
これでBGMの設定は完了です。
次に『Script』フォルダーの中でスクリプトを作成して名前を『Collisionmusic』に変更してください。
以下のコードをCollisionmusic.csスクリプトに入力してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Collisionmusic : MonoBehaviour { //音データの再生装置を格納する private new AudioSource audio; //音データを格納する [SerializeField] private AudioClip sound; //Start is called before the first frame update private void Start() { //コンポーネントから再生装置を検出する audio = gameObject.AddComponent<AudioSource>(); } //衝突したとき private void OnCollisionEnter(Collision collision) { //"Player"タグがついているオブジェクトに衝突した場合 if (collision.gameObject.tag == "Player") { //音を鳴らす audio.PlayOneShot(sound); //0.2秒後にオブジェクトが消える Destroy(gameObject, 0.2f); } } } |
Collisionmusic.csスクリプトの解説をします。
音を鳴らすためには、音楽の再生装置を持たせて音源をセットする必要があります。以下のコードで再生装置を持たせて音源をセットできるような枠を作ります。
1 2 3 4 |
//音データの再生装置を格納する private new AudioSource audio; //音データを格納する [SerializeField] private AudioClip sound; |
次に『musicbox』と『collisionbox』が衝突した時のコードを挿入します。
特定のオブジェクトと衝突させる時は、『OnCollisionEnter』関数の中にif文を使用して『Player』タグが付いているオブジェクトに限定させます。
後ほど『collisionbox』のタグを『Player』に変更します。
if文の中に衝突した時に発生させたい処理を挿入します。音ゲーの場合、音を鳴らすコードとオブジェクトを消すコードを挿入します。
1 2 3 4 5 6 7 8 9 10 11 12 |
//衝突したとき private void OnCollisionEnter(Collision collision) { //"Player"タグがついているオブジェクトに衝突した場合 if (collision.gameObject.tag == "Player") { //音を鳴らす audio.PlayOneShot(sound); //0.2秒後にオブジェクトが消える Destroy(gameObject, 0.2f); } } |
コードの入力が完了したら『collisionbox』オブジェクトのタグを『Player』に変更します。
ヒエラルキーの中にある『collisionbox.pink』を選択してインスペクターの名前の下にあるタグ欄を『Player』に変更してください。
残り3つの『collisionbox』のタグも変更してください。
次にヒエラルキーの中にある『musicbox.pink』の『>』を選択してインスペクターに『Collisionmusic』スクリプトをドロップします。
ドロップした『Collisionmusic』スクリプトの『Sound』欄の◉を選択して音源の『dram』を選択してください。
ヒエラルキーにある『musicbox.pink』の『<』を選択して戻ります。
これで1つ目の『musicbox』と『collisionbox』が衝突すると音を鳴らして消える処理が完了しました。
同じやり方で残り4つの『musicbox』に設定していきましょう。以下に『musicbox』オブジェクトごとの音源を記載します。
これで『musicbox』と『collisionbox』が衝突すると音が鳴って消える処理の設定が完了しました。
このままの状態だと『collisionbox』に『musicbox』が当たっても『collisionbox』は表示されたままのため非表示になるようにしていきます。
それでは、『Script』フォルダーの中でスクリプトを作成し名前を『NonActive』に変更してください。
以下に完成したNonActive.csスクリプトを入力してください。
こちらのコードは、『collisionbox』が他のオブジェクトに衝突した際に非表示になるコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NonActive : MonoBehaviour { //衝突したとき private void OnCollisionEnter(UnityEngine.Collision collision) { //オブジェクトを非アクティブにする this.gameObject.SetActive(false); } } |
コードの入力ができたら『collision.pink』オブジェクトのインスペクターにドロップさせてください。
同じように残り3つの『collisionbox』のインスペクターにも『NonActive』スクリプトをドロップさせてください。
実行ボタン▶︎を押して『musicbox』と衝突した時に『collisionbox』が非表示になるか確認しましょう。
音ゲーの作り方第6回のまとめと次回について
第6回目の開発お疲れさまでした。
今回は、音ゲーのBGMや効果音が鳴る処理を実装しました。
Unityの物理エンジンの衝突判定とタグの設定を行ったことで『Push』ボタンを押した時に音が鳴って『musicbox』が消える仕組みを作ることができました。
次回は、第7回の「Unity C# 音ゲーの作り方7 スコアをカウントするスクリプトを作成しよう」です。
コメント