Menu
CoddyTech

スコアを表示する

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回分遅れてしまいます。

challenge icon

チャレンジ

簡単

画面に庭師の種と木の数を表示しましょう。

  1. Gardener.csで、seedsText.textを"Seeds: " + seedsに、treesText.textを"Trees: " + treesに設定するvoid ShowCounts()を書きましょう。
  2. 新しい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プレイグラウンド