8. スコアを表示しよう

コインを取得したら、右上に取得した数に応じたスコアが表示されるようにしてみましょう。

uGUIのテキストを右上にレイアウトしよう

これまでに作成した作業を復習を兼ねてやってみましょう。

  1. テキストを作成
  2. RectTransformを編集して右上に配置
  3. スコアを表示する文字のフォントを設定

コインを取得したらスコアをアップさせるプログラムを書こう

まず、スコアのスクリプトにメッセージを送信するためにCoinクラスからスコアのゲームオブジェクトを見つける必要があります。 ここまではGetComponentなどを使用してきましたが、ここではGameObject.Find("ゲームオブジェクトの名前")という方法で探しています。 名前からゲームオブジェクトを探す必要があるので、Unityエディタ上の名前とスクリプトで記述している名前が同じでないといけないの注意しましょう。 ここではScoreTextという名前でテキストオブジェクトを作成します。

あとは、コイン側に、取得した時にスコアにメッセージを送信するスクリプトを記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Coin : MonoBehaviour
{
  ~
  void OnTriggerEnter(Collider other) {
    ~
    //スコアのゲームオブジェクトを取得する
    GameObject scoreTextGo = GameObject.Find("ScoreText");

    //メッセージを送信する
    scoreTextGo.SendMessage("OnScore", 1);
  }
}

最後に、スコア側でメッセージを受け取った際に実行されるメソッドを記述します。

Legacy(Text)版

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//UIをスクリプトから動かせるように追加する

public class Score : MonoBehaviour
{
  //スコアをメモする変数を宣言する
  int score = 0;

  //メッセージを受け取る
  public void OnScore (int num)
  {
    //scoreに受け取った値を追加する
    score += num;

    //Textコンポーネントを取得する
    Text scoreText = gameObject.GetComponent<Text> ();

    //scoreをテキストとして表示する
    scoreText.text = score.ToString();
  }
}

TextMeshPro版

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;//TMProをスクリプトから動かせるようにする

public class Score : MonoBehaviour
{
  //スコアをメモする変数を宣言する
  int score = 0;

  //メッセージを受け取る
  public void OnScore (int num)
  {
    //scoreに受け取った値を追加する
    score += num;

    //Textコンポーネントを取得する
    TMP_Text scoreText = gameObject.GetComponent<TMP_Text> ();

    //scoreをテキストとして表示する
    scoreText.text = score.ToString();
  }
}

Textコンポーネントは2021.3.x 移行Legacy扱いになり、代わりにTextMeshPro版のTextコンポーネントが使われるようになりました。TextMeshPro版のTextコンポーネントの使い方は微妙に違うのですが、以下を参照してください。