Покажем счёт
Часть раздела Создание настоящих игр путешествия по 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, отобразится старое количество — на одно нажатие меньше.
Задание
ЛегкоСадовник сажает деревья. Стрелки перемещают его, а клавиша 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: в двух текстовых полях, начиная с первого кадра
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня7Управление временем
Пауза с timeScaleЗамедленное движениеНемасштабируемое времяПовторение: Bullet Time10Проект: 3D-платформер
ТрассаДвижущиеся платформы2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банке