Unity C# 音ゲーの作り方講座の第8回目、「コンボをカウントするスクリプトを作成しよう」をチュートリアル形式で説明していきます。
前回講座の「Unity C# 音ゲーの作り方7 スコアをカウントするスクリプトを作成しよう」で点数を管理するスクリプトと点数をテキストオブジェクトに反映させるスクリプトを作りました。
今回はこの続きとして、連続で音を鳴らしたときのコンボ処理の実装とコンボ数をカウントするスクリプトを作成します。
音ゲーの『musicbox』と『collisionbox』を衝突させてコンボを発生させよう
音ゲーの『musicbox』と『collisionbox』を衝突させてコンボを発生させるために3種類のスクリプトを作成していきます。
1つ目は、発生したコンボ数をテキストオブジェクトに反映させるスクリプトです。
2つ目は、『musicbox』と『collisionbox』が衝突した時のコンボの数値を管理するスクリプトです。
本講座の音ゲーは、コンボ数を増加させるだけではなく『resetbox』が衝突するとコンボ数が0になる仕組みになっています。
そのため、『musicbox』と『resetbox』が衝突した時にコンボ数を0にするスクリプトも作成していきます。
合計3つのスクリプトを作成していきます。
まずは発生したコンボ数をテキストオブジェクトに反映させるスクリプトから作成していきます。
音ゲーのコンボ数をテキストオブジェクトに反映させるスクリプトを作成しよう
音ゲーのコンボ数をテキストオブジェクトに反映させるスクリプトを作成していきます。
『Script』フォルダーの中でスクリプトを作成して名前を『Combotext』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
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 |
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class Combotext : MonoBehaviour { //コンボ加算したいtextと紐付ける public float Combo; public TextMeshProUGUI combocounttext; //Combotextにアクセスして実行する internal static void SetCombotext() { throw new NotImplementedException(); } // Start is called before the first frame update void Start() { //0からスタートする Combo = 0; } // Update is called once per frame void Update() { //textのフォーマットを設定する combocounttext.text = string.Format("{0}", Combo); } } |
『Combotext』スクリプトの解説をしていきます。
スコアをカウントするスクリプトと同様にスクリプトでTextMwshProを操作するときは『using TMPro;』が必要になります。
1 |
using TMPro; |
そのためTextMeshProオブジェクトを格納する際も『public Text』ではなく『public TextMeshProUGUI』を使用します。
1 |
public TextMeshProUGUI combocounttext; |
後ほど作成する『ComboSm』スクリプトから『combocounttext』オブジェクトと紐付けると加算されたスコアが『Combotext』の『Combo』に反映されます。反映されたスコアを以下のコードで『combocounttext』オブジェクトに表示させます。
1 2 |
//textのフォーマットを設定する combocounttext.text = string.Format("{0}", Combo); |
『Combotext』スクリプトの入力ができたらヒエラルキーの中にある『combocounttext』を選択してインスペクターに『Combotext』スクリプトをドロップしてください。
インスペクターにある『Combotext』の中の『Combocounttext』という項目の◉を選択して『combocounttext』を選択する。
これで音ゲーのコンボ数をテキストオブジェクトに反映させるスクリプトの作成と設定が完了しました。
音ゲーのコンボの数値を管理するスクリプトを作成しよう
音ゲーのコンボの数値を管理するスクリプトを作成していきます。
『Script』フォルダーの中でスクリプトを作成して名前を『ComboSm』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ComboSm : MonoBehaviour { //コンボやCombotextをアタッチしているcombocounttextを格納する public Combotext Sm; // Start is called before the first frame update void Start() { //コンポーネントからcombocounttextを検出する Sm = GameObject.Find("combocounttext").GetComponent<Combotext>(); //0からスタート } //衝突した時 private void OnCollisionEnter(Collision collision) { //コンボが0や"Player"タグのオブジェクトに衝突した場合 if (collision.gameObject.tag == "Player") { //コンボ1増加する Sm.Combo += 1; } } } |
『ComboSm』スクリプトの解説をしていきます。
『Comboetext』スクリプトをアタッチしている『combocounttext』と紐付けるため『combocounttext』オブジェクトを探してオブジェクトを入れるための枠を以下のコードで作ります。
1 2 3 4 5 6 7 8 |
//コンボやCombotextをアタッチしているcombocounttextを格納する public Combotext Sm; // Start is called before the first frame update void Start() { //コンポーネントからcombocounttextを検出する Sm = GameObject.Find("combocounttext").GetComponent<Combotext>(); } |
『musicbox』オブジェクトが『Player』タグの付いた『collisionbox』と衝突した時にコンボ数を1ずつ増やすコードを入力します。
1 2 3 4 5 6 7 8 9 10 |
//衝突した時 private void OnCollisionEnter(Collision collision) { //コンボが0や"Player"タグのオブジェクトに衝突した場合 if (collision.gameObject.tag == "Player") { //コンボが1増加する Sm.Combo += 1; } } |
『ComboSm』スクリプトの入力ができたらヒエラルキーの中にある『musicbox.pink』の『>』を選択してからインスペクターに『ComboSm』スクリプトをドロップしてください。
ドロップしたらヒエラルキーの中にある『musicbox.pink』の『<』を選択して戻ります。
『musicbox.pink』のインスペクターにある『ComboSm』という項目の『Sm』の◉を選択して『combocounttext』を選択してください。
同じやり方で『musicbox.green』『musicbox.blue』『musicbox.orange』にスクリプトをドロップして『Sm』という項目を『combocounttext』にしてください。
これで音ゲーのコンボの数値を管理するスクリプトの作成・設定が完了しました。
続いてコンボの数値を0にするスクリプトの作成を説明していきます。
『Script』フォルダーの中でスクリプトを作成して名前を『MinusComboSm』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MinusComboSm : MonoBehaviour { //コンボやCombotextをアタッチしているcombocounttextを格納する public Combotext Sm; // Start is called before the first frame update void Start() { //コンポーネントからCombotextを検出する Sm = GameObject.Find("combocounttext").GetComponent<Combotext>(); } //衝突した時 private void OnCollisionEnter(Collision collision) { //コンボが0や"resetbox"タグのオブジェクトに衝突した場合 if (collision.gameObject.tag == "resetbox") { //コンボを0にする Sm.Combo = 0; //オブジェクトが消える Destroy(this.gameObject); } } } |
『MinusComboSm』スクリプトの解説をしていきます。
『MinusComboSm』スクリプトは『ComboSm』スクリプトの内容とほとんど変わりませんが、『musicbox』と『resetbox』タグがついたオブジェクトに衝突した時にコンボ数が0になり消える仕組みに変更しています。後ほど『resetbox』オブジェクトのタグを変更します。
1 2 3 4 5 6 7 8 9 10 11 12 |
//衝突した時 private void OnCollisionEnter(Collision collision) { //コンボが0や"resetbox"タグのオブジェクトに衝突した場合 if (collision.gameObject.tag == "resetbox") { //コンボを0にする Sm.Combo = 0; //オブジェクトが消える Destroy(this.gameObject); } } |
『MinusComboSm』スクリプトの入力ができたらヒエラルキーの中にある『musicbox.pink』の『>』を選択してからインスペクターに『MinusComboSm』スクリプトをドロップしてください。
ドロップしたらヒエラルキーの中にある『musicbox.pink』の『<』を選択して戻ります。
『musicbox.pink』のインスペクターにある『MinusComboSm』という項目の『Sm』の◉を選択して『combocounttext』を選択してください。
同じやり方で『musicbox.green』『musicbox.blue』『musicbox.orange』にスクリプトをドロップして『Sm』という項目を『combocounttext』にしてください。
『musicbox.bakudan』オブジェクトは『resetbox』に当たると残り続けてオブジェクトが渋滞してしまうため『musicbox.bakudan』も『resetbox』に衝突した時に消えるスクリプトを作成します。
『Script』フォルダーの中でスクリプトを作成して名前を『Destroy』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
『Destroy』スクリプトは、『resetbox』タグがついたオブジェクトと衝突した時にスクリプトをアタッチしているオブジェクトが消える仕組みになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Destroy : MonoBehaviour { //衝突した時 private void OnCollisionEnter(Collision collision) { //"resetbox"タグに衝突した場合 if(collision.gameObject.tag == "resetbox") { //オブジェクトが消える Destroy(this.gameObject); } } } |
『Destroy』スクリプトの入力ができたらヒエラルキーの中にある『musicbox.bakudan』の『>』を選択してからインスペクターに『Destroy』スクリプトをドロップしてください。
ドロップしたらヒエラルキーの中にある『musicbox.bakudan』の『<』を選択して戻ります。
次に『resetbox』オブジェクトのタグを新規追加して『resetbox』に変更していきます。
新規追加は、タグの『▼』→『タグを追加』→『+』を選択して『NewTagName』に『resetbox』と入力して『Save』を選択してください。
もう一度『resetbox』オブジェクトのインスペクターにあるタグの『▼』を選択して『resetbox』というタグに変更してください。
これで音ゲーのコンボの数値を0にするスクリプトの作成・設定が完了しました。
実行ボタン▶を押して以下のようにコンボがカウントされたり0になるか確認してください。
音ゲーの作り方第8回のまとめと次回
第8回目の開発お疲れさまでした。
今回は、音ゲーの『musicbox』と『collisionbox』が衝突するとコンボ数をカウントしたり0にする仕組みを作成しました。
スクリプトのコードは、仕組みを理解すると応用してゲームの中で何度も活用することができます。
次回は、第9回の「Unity C# 音ゲーの作り方9 Sliderをスコアに合わせて動かそう/リファクタリングのススメ」です。
コメント