2Dゲームで、ミサイルが当たったときにスコアが表示される仕組みをつくってみましょう。
発射したレーザーミサイルが敵にぶつかると、Scoreが加点され、ミサイルも削除されます。
関連記事:
クリックでミサイルを発射-2Dシューティング
2Dゲームで画面端から外へ移動させない
Prefabに触れると得点が入る
点数をテキスト表示
TextMeshProをスクリプトで表示
ハイスコアをつくる
ゴールすれば花火を打ち上げる
点数によるABC評価ランク
TextMeshProの準備
※この章は、クリックでミサイルを発射-2Dシューティングを作成してから進めてください。
今回はTextMeshProを使って、作成します。
TMP Importの画面が出ますので、Import TMP Essentialsをクリックしましょう。
Textを下の方に配置し、SCORE:0 を入れておきます。
Canvasを選択し、UIスケールモード > 画面サイズに拡大にします。
ゲームの画面サイズに合わせて、テキストサイズが自動調整されます。
ゲームビューではこのように表示されています。
敵キャラの準備
敵キャラのオブジェクトを作成しましょう。
今回も、ギャラクシア2Dスペースシュータースプライトパック#1 のフリーアセットを使用しています。
大きさを5倍にしました。
2Dサークルコライダーを追加し、コライダーのサイズを、敵キャラに合わせます。
2Dリジッドボディを追加し、ボディタイプはキネマティックに変更します。
Enemyという名前でタグをつけておきます。
敵キャラをプレハブ化します。
プレハブの元データは削除しておきましょう。
敵キャラのランダム生成
続いて、敵キャラを1秒おきにランダム出現させます。
空のオブジェクトを作成します。
GameManager.csを作成し、GameObjectに追加します。
GameManager.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; //TextMeshProを扱う際に必要 public class GameManager : MonoBehaviour { [SerializeField] TextMeshProUGUI scoreText; [SerializeField] GameObject enemy; private int score; private float time; private int vecX; void Update() { time -= Time.deltaTime; if (time < 0) { vecX = Random.Range(-6, 6); Instantiate(enemy,new Vector2(vecX, 4), Quaternion.identity); time = 1; } } public void AddScore() { score++; scoreText.text = "SCORE: " + score.ToString(); } } |
ScoreText、Enemyのフィールドに、それぞれのオブジェクトを入れます。
ミサイル側のスクリプト
続いて、ミサイル側の設定を行います。
カプセルコライダーを追加し、サイズを調整。
トリガーにするにチェックを入れます。
ミサイル側のスクリプトを追記します。
LaserMove.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LaserMove : MonoBehaviour { [SerializeField] float laserSpeed; private GameObject gameObj; //GameObjectを入れる変数 void Start() { gameObj = GameObject.Find("GameObject");//GameObjectを取得 } void OnTriggerEnter2D(Collider2D collider)//オブジェクトの当たり判定 { if (collider.gameObject.tag == "Enemy")//Enemyタグに当たったとき実行 { gameObj.GetComponent<GameManager>().AddScore();//AddScore()を実行して加点 Destroy(collider.gameObject);//敵キャラを削除 Destroy (gameObject);//ミサイルを削除 } } void Update() { transform.position = new Vector2(transform.position.x, transform.position.y + laserSpeed * Time.deltaTime); if (transform.position.y > 7.0f) Destroy (gameObject); } } |
ゲームプレイしてみましょう。
WASDキーで移動、クリックで発射。
敵キャラに当たればスコアが加点されて、ミサイルと敵キャラが消えます。
関連記事:
クリックでミサイルを発射-2Dシューティング
2Dゲームで画面端から外へ移動させない
Prefabに触れると得点が入る
点数をテキスト表示
TextMeshProをスクリプトで表示
ハイスコアをつくる
ゴールすれば花火を打ち上げる
点数によるABC評価ランク