経緯
Unityでゲームを制作する中で、「アイテムに触れたらポイントが増える」仕組みを実装したいと考え、今回学習と実装を行いました。
スコア制のゲームではよくある要素ですが、タグによるオブジェクト検出とTextMeshProによるUI表示を組み合わせることで、初心者でも簡単に構築できます。
タグでアイテムを検出し、ポイントを更新する処理
今回のコードでは、"item"
というタグが付けられたオブジェクトを取得し、ポイント加算とUI更新を行う機能を作成しています。
※なお、当たり判定そのものの処理は別途用意する必要があります。
以下が実装例です。
using TMPro;
public TextMeshProUGUI pointObject;
int point = 0;
public void GetItem()
{
// "item"タグのついたオブジェクトを検索する
GameObject[] items = GameObject.FindGameObjectsWithTag("item");
// ポイントを加算する
this.point++;
// TextMeshProでポイントをUIに表示
pointObject.text = "Point: " + point.ToString();
}
コードの補足とポイント
TextMeshProUGUI
はTextMeshPro
を使ったUI表示のためのクラスです。
Unityの標準UIではなく、TextMeshPro(TMP)を使っている場合はこのクラスが必要になります。GameObject.FindGameObjectsWithTag("item")
により、指定タグがついたすべてのオブジェクトを配列で取得しています。
ただし、今回は取得した配列そのものは使用していません(取得だけして、ポイント加算のみを行っています)。this.point++
によって、ポイントを1つ加算しています。- 最後に
pointObject.text
を更新し、画面に反映しています。
実際に使う際の流れ
このGetItem()
メソッドは、たとえば当たり判定が発生したタイミングで呼び出すことを想定しています。
以下のように、コライダーなどでの衝突検出の中に呼び出しを組み込むことで、ポイント加算が機能します。
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("item"))
{
GetItem();
Destroy(other.gameObject);
}
}
このようにすると、「item」タグのオブジェクトに当たった際に GetItem()
が実行され、ポイントが加算されます。
また、Destroy()
によってアイテムも消去されるため、アイテム収集型のゲームに自然な流れで組み込めます。
まとめ
今回のように、タグを使って対象オブジェクトを判別し、TextMeshProで画面にポイントを反映する処理は、Unity初学者でも導入しやすい基本的な仕組みです。
当たり判定と組み合わせれば、シンプルながら実用的なスコアシステムが構築できます。
ゲームの基本要素として、ぜひ取り入れてみてください。
最後までお読みいただき、ありがとうございました。