コインを取得したら、右上に取得した数に応じたスコアが表示されるようにしてみましょう。
uGUIのテキストを右上にレイアウトしよう
これまでに作成した作業を復習を兼ねてやってみましょう。
- テキストを作成
- RectTransformを編集して右上に配置
- スコアを表示する文字のフォントを設定
コインを取得したらスコアをアップさせるプログラムを書こう
まず、スコアのスクリプトにメッセージを送信するために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コンポーネントの使い方は微妙に違うのですが、以下を参照してください。