スコアを表示する
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 2/60。
テキストのtextは文字列なので、数値を表示する前にテキストに変換する必要があります。+で文字列に連結すると変換できます。"Wood: " + woodは、woodが12の場合、Wood: 12になり、wood.ToString()は12になります。int単体では適合しません。woodText.text = wood;はCS0029、Cannot implicitly convert type 'int' to 'string'というエラーで失敗します。
数値はintフィールドに保持され、テキストはそれを表示するだけです。フィールドの値からテキストを書き換えるメソッドを1つ用意し、数値を変更するたびにそれを呼び出します。また、Start()からも呼び出すため、最初のフレームにはInspectorに入力された値ではなく、実際の値が表示されます。ここではSpaceキーを押すと丸太を3本切ります。
public TMP_Text woodText;
private int wood;
void Start()
{
ShowWood();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
wood += 3;
ShowWood();
}
}
void ShowWood()
{
woodText.text = "Wood: " + wood;
}テキストが変わるのはwoodが変わったときだけです。毎回のUpdate()でテキストを書き換えても見た目は同じですが、何のためにもならない文字列を1秒間に60回生成することになります。順序が重要です。wood += 3より前にShowWood()を呼び出すと、古い数が表示され、1回分遅れてしまいます。
チャレンジ
簡単画面に庭師の種と木の数を表示しましょう。
Gardener.csで、seedsText.textを"Seeds: " + seedsに、treesText.textを"Trees: " + treesに設定するvoid ShowCounts()を書きましょう。- 新しい
Start()内と、植え付けのif内でtrees++;の後に呼び出しましょう。
「プレイ」を押すと、テキストにSeeds: 5とTrees: 0が表示され、苗木を植えるたびに数が変わります。その後、「確認」を押しましょう。
自分で試してみよう
using UnityEngine;
using TMPro;
public class Gardener : MonoBehaviour
{
public float speed = 4f;
public int seeds = 10;
public GameObject saplingPrefab;
public TMP_Text seedsText;
public TMP_Text treesText;
private int trees;
void Update()
{
float move = Input.GetAxisRaw("Horizontal");
transform.Translate(move * speed * Time.deltaTime, 0f, 0f);
if (Input.GetKeyDown(KeyCode.Space) && seeds > 0)
{
Vector3 spot = new Vector3(transform.position.x, 0.5f, 1.5f);
Instantiate(saplingPrefab, spot, Quaternion.identity);
seeds--;
trees++;
}
}
// 最初のフレームから、2つのテキストにそれぞれ Seeds: と Trees: を表示する
}
本格的なゲームを作るのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド