Unity C# 音ゲーの作り方講座の第7回目、「スコアをカウントするスクリプトを作成しよう」をチュートリアル形式で説明していきます。
前回は音源データをゲームに組み込み、音ノーツを生成して流れる処理とタイミングよく叩くと音が鳴るし仕組みを作りました。
前回の記事:
今回は音ノーツである『musicbox』と『collisionbox』が衝突するとスコアが加点される仕組みを作っていきます。
加点だけでなく減点される仕組みとその実装方法についても説明していきます。
また、TextMeshProを活用したメッセージ表示もマスターしていきましょう。
音ゲーの『musicbox』と『collisionbox』を衝突させて得点を発生させよう
音ゲーの『musicbox』と『collisionbox』を衝突させて得点を発生させるために3種類のスクリプトを作成していきます。
1つ目は、発生した点数をテキストオブジェクトに反映させるスクリプトです。
2つ目は、『musicbox』と『collisionbox』が衝突した時の加点を管理するスクリプトです。
本講座の音ゲーには、加点だけでなく『musicbox.bakudan』が『collisionbox』に衝突すると減点される仕組みもあります。
そのため、『musicbox.bakudan』と『collisionbox』が衝突した時の減点を管理するスクリプトも作成していきます。
合計3つのスクリプトを作成していきます。
スムーズに設定を行えるように発生した点数の数値をテキストオブジェクトに反映させるスクリプトから作成していきます。
音ゲーの点数をテキストオブジェクトに反映させるスクリプトを作成しよう
音ゲーの点数をテキストオブジェクトに反映させるスクリプトを作成していきます。
『Script』フォルダーの中でスクリプトを作成して名前を『Scoretext』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
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 Scoretext : MonoBehaviour { //スコア加算したいtextと紐付ける public float Score; public TextMeshProUGUI scorecounttext; //Scoretextにアクセスして実行する internal static void SetScoretext() { throw new NotImplementedException(); } // Start is called before the first frame update void Start() { //0からスタートする Score = 0; } // Update is called once per frame void Update() { //textのフォーマットを設定する scorecounttext.text = string.Format("{0}", Score); } } |
『Scoretext』スクリプトの解説をしていきます。
スクリプトでテキストオブジェクトを操作するときは『using UnityEngine.UI;』が必要ですが、音ゲーはTextMeshProを使用している為『using TMPro;』が必要になります。
1 |
using TMPro; |
そのためTextMeshProオブジェクトを格納する際も『public Text』ではなく『public TextMeshProUGUI』を使用します。
1 |
public TextMeshProUGUI scorecounttext; |
後ほど作成する『ScoreSm』スクリプトから『scorecounttext』オブジェクトと紐付けると加算されたスコアが『Scoretext』の『Score』に反映されます。反映されたスコアを以下のコードで『scorecounttext』オブジェクトに表示させます。
1 2 |
//textのフォーマットを設定する scorecounttext.text = string.Format("{0}", Score); |
『Scoretext』スクリプトの入力ができたらヒエラルキーの中にある『scorecounttext』を選択してインスペクターに『Scoretext』スクリプトをドロップしてください。
インスペクターにある『Scoretext』の中の『Scorecounttext』という項目の◉を選択して『scorecounttext』を選択してください。
これで音ゲーの点数をテキストオブジェクトに反映させるスクリプトの作成と設定が完了しました。
音ゲーの加点と減点を管理するスクリプトを作成しよう
音ゲーの加点と減点を管理するスクリプトを作成していきます。
『Script』フォルダーの中でスクリプトを作成して名前を『ScoreSm』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
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; using TMPro; public class ScoreSm : MonoBehaviour { //スコアやScoretextをアタッチしているscorecounttextを格納する public Scoretext Sm; // Start is called before the first frame update void Start() { //コンポーネントからscorecounttextを検出する Sm = GameObject.Find("scorecounttext").GetComponent<Scoretext>(); } //衝突した時 private void OnCollisionEnter(Collision collision) { //スコアが0や"Player"タグのオブジェクトに衝突した場合 if (collision.gameObject.tag == "Player") { //スコア20増加する Sm.Score += 20; } } } |
『ScoreSm』スクリプトの解説をしていきます。
『Scoretext』スクリプトをアタッチしている『scorecounttext』と紐付けるため『scorecounttext』オブジェクトを探してオブジェクトを入れるための枠を以下のコードで作ります。
1 2 3 4 5 6 7 8 |
//スコアやScoretextをアタッチしているscorecounttextを格納する public Scoretext Sm; // Start is called before the first frame update void Start() { //コンポーネントからscorecounttextを検出する Sm = GameObject.Find("scorecounttext").GetComponent<Scoretext>(); } |
『musicbox』オブジェクトが『Player』タグの付いた『collisionbox』と衝突した時にスコアを20点ずつ増やすコードを入力します。
1 2 3 4 5 6 7 8 9 10 |
//衝突した時 private void OnCollisionEnter(Collision collision) { //スコアが0や"Player"タグのオブジェクトに衝突した場合 if (collision.gameObject.tag == "Player") { //スコア20増加する Sm.Score += 20; } } |
『ScoreSm』スクリプトの入力ができたらヒエラルキーの中にある『musicbox.pink』の『>』を選択してからインスペクターに『ScoreSm』スクリプトをドロップしてください。
ドロップしたらヒエラルキーの中にある『musicbox.pink』の『<』を選択してください。
『musicbox.pink』のインスペクターに『ScoreSm』という項目の中に『Sm』の◉を選択して『scorecounttext』を選択してください。
同じやり方で『musicbox.green』『musicbox.blue』『musicbox.orange』に『ScoreSm』スクリプトをドロップして『Sm』という項目を『scorecounttext』にしてください。
これで音ゲーの加点を管理するスクリプトの作成・設定が完了しました。
続いて音ゲーの減点を管理するスクリプトの作成を説明していきます。
『Script』フォルダーの中でスクリプトを作成して名前を『MinusScoreSm』に変更して『開く』を選択してください。
以下に完成したスクリプトを掲載するのでコピーして入力してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MinusScoreSm : MonoBehaviour { public Scoretext Sm; // Start is called before the first frame update void Start() { Sm = GameObject.Find("scorecounttext").GetComponent<Scoretext>(); } private void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Player") { Sm.Score -= 5; } } } |
『MinusScoreSm』スクリプトの解説をしていきます。
『MinusScoreSm』スクリプトは『ScoreSm』スクリプトの内容とほとんど変わりませんが、『musicbox.bakudan』と『collisionbox』が衝突した時に得点がマイナスになるように『-= 5』と変更しています。
1 2 3 4 5 6 7 |
private void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "Player") { Sm.Score -= 5; } } |
『MinusScoreSm』スクリプトの入力ができたらヒエラルキーの中にある『musicbox.bakudan』の『>』を選択してからインスペクターに『MinusScoreSm』スクリプトをドロップしてください。
ドロップしたらヒエラルキーの中にある『musicbox.bakudan』の『<』を選択してください。
『musicbox.pbakudan』のインスペクターに『MinusScoreSm』という項目の中に『Sm』の◉を選択して『scorecounttext』を選択してください。
これで音ゲーの加点を管理するスクリプトの作成・設定が完了しました。
それでは、実行ボタン▶を押して『musicbox』と『collisionbox』が衝突すると以下のように得点が増減するか確認してください。
音ゲーの作り方第7回のまとめと次回
第7回目の開発お疲れさまでした。
今回は、音ゲーの『musicbox』と『collisionbox』が衝突するとスコアが加点・減点される仕組みを作成しました。
スクリプトの作成が増えると、各スクリプトがどのような機能なのか混乱しやすくなるためコマンドの活用や名前の付け方は大切です。
次回は、第8回の「Unity C# 音ゲーの作り方8 コンボをカウントするスクリプトを作成しよう」です。
コメント