Menu
CoddyTech

スコアを表示する

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 2/56。

テキストの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

チャレンジ

簡単

庭師は木を植えます。矢印キーで庭師を動かし、種が残っている間は Space キーで苗木を植えます。これはすでに Gardener.cs が行っています。画面に数を表示しましょう。シーンでは seedsText と treesText が設定されています。

  • seedsText には残りの種を Seeds: 4 のように表示し、treesText には植えた木を Trees: 1 のように表示します。
  • どちらの表示も、最初のフレームから、また植えるたびに正しい値になります。Inspector では庭師に種を 5 個設定していますが、シーン内のテキストはまだ Seeds: 10 と Trees: ? のままです。
  • 両方のテキストを設定するメソッドを 1 つ作り、必要な箇所から呼び出します。

Play を押して、種がなくなるまで植えてから、Check を押します。

自分で試してみよう

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: を表示する
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

本格的なゲームを作るのすべてのレッスン