2Dゲームで、ミサイルが当たったときにスコアが表示される仕組みをつくってみましょう。
発射したレーザーミサイルが敵にぶつかると、Scoreが加点され、ミサイルも削除されます。
関連記事:
Prefabに触れると得点が入る
点数をテキスト表示
Textの準備
この章は、【Unity C#】クリックでミサイルを発射-2Dシューティング を作成してから進めてください。
【Unity C#】クリックでミサイルを発射-2Dシューティング
https://futabazemi.net/notes/unity-script-score/
まずはテキストを作成します。
Textの名前をScoreTextに変更しました。
ScoreTextのサイズ、色、配置を変更します。
Canvasを選択し、UIスケールモード > 画面サイズに拡大にします。
ゲームの画面サイズに合わせて、テキストサイズが自動調整されます。
ゲームビューではこのように表示されています。
テキストに入っているNewTextは削除しましょう。
テキスト表示のスクリプト
続いて、テキスト表示のスクリプトを作成します。
まずは空のオブジェクトを作成しましょう。
CountText.csを作成し、GameObjectに追加します。
CountText.csを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CountText : MonoBehaviour { int score = 0; public Text scoreText; public void AddScore() { score++; } void Update() { scoreText.text = "SCORE: " + score.ToString(); } } |
テキストを扱う場合は、using UnityEngine.UI; を忘れずに記述しておきましょう。
GameObjectのインスペクターに、ScoreTextフィールドが出来ています。
ここに、ScoreTextを入れましょう。
標的の作成
標的(敵)となるオブジェクトを用意しましょう。
今回も、ギャラクシア2Dスペースシュータースプライトパック#1 のフリーアセットを使用しています。
標的を5倍の大きさにしました。
標的にタグを設定しましょう。
タグ名はEnemyとしました。
Enemyタグを忘れずに選択しましょう。
コンポーネントを追加から、2Dサークルコライダーと、2Dリジッドボディを追加。
トリガーにするにチェックを入れ、ボディタイプはキネマテックを選択します。
コライダーを編集してサイズを調整します。
標的のサイズに合わせましょう。
当たった時にAddScoreを実行
標的にぶつけるのはミサイルなので、ミサイルを編集していきます。
まずは、ミサイルのプレハブを選択し、コンポーネントを追加から、2Dカプセルコライダーを選びます。
続いて、ミサイルのプレハブに追加しているLaserMove.csを編集しましょう。
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 33 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LaserMove : MonoBehaviour { public float laserSpeed; GameObject scoreObject; void Start() { scoreObject = GameObject.Find("GameObject"); } void OnTriggerEnter2D(Collider2D collider) { if (collider.gameObject.tag == "Enemy") { scoreObject.GetComponent<CountText>().AddScore(); Destroy (gameObject); } } void Update() { Vector3 position = transform.position; position.y += laserSpeed * Time.deltaTime; transform.position = position; if (transform.position.y > 7.0f) { Destroy (gameObject); } } } |
ゲームプレイしましょう。
標的に当たるとスコアが1ずつ増え、ミサイルも削除されています。
関連記事:
Prefabに触れると得点が入る
点数をテキスト表示