Menu
CoddyTech

Покажем счёт

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 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, а текст только отображает его. Один метод обновляет текст на основе значения поля; каждый раз при изменении числа вызывается этот метод, как и из 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() выглядело бы так же, но без необходимости создавало бы новую строку 60 раз в секунду. Порядок важен: если вызвать ShowWood() до wood += 3, на экране будет старое количество — на одно нажатие меньше.

challenge icon

Задание

Легко

Покажи на экране количество семян и деревьев у садовника.

  1. В Gardener.cs напиши void ShowCounts(), которая присваивает seedsText.text значение "Seeds: " + seeds, а treesText.text — значение "Trees: " + trees.
  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++;
        }
    }

    // Показывай Seeds: и Trees: в двух текстовых полях, начиная с первого кадра
}

Все уроки раздела Создание настоящих игр

Потренируйтесь самостоятельно: Песочница Unity