Menu
CoddyTech

Покажем счёт

Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 2 из 56.

text текста — это строка, поэтому число нужно преобразовать в текст, прежде чем его показывать. Для этого к строке добавляют число с помощью +: "Wood: " + wood — это Wood: 12, когда wood равно 12, а wood.ToString() — это 12. Само значение типа int не подходит: woodText.text = wood; приводит к ошибке CS0029: нельзя неявно преобразовать тип 'int' в '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

Задание

Легко

Садовник сажает деревья. Стрелки перемещают его, а клавиша Space сажает саженец, пока остаются семена, как это уже делает Gardener.cs. Показывай количество на экране; в сцене связаны seedsText и treesText:

  • seedsText показывает количество оставшихся семян, например Seeds: 4, а treesText — количество посаженных деревьев, например Trees: 1.
  • Оба значения верны с первого кадра и после каждой посадки. В Inspector садовнику задано 5 семян, хотя тексты в сцене всё ещё показывают Seeds: 10 и Trees: ?.
  • Напиши один метод, который задаёт оба текста, и вызывай его, когда это необходимо.

Нажми 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++;
        }
    }

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

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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