Кнопки и onClick
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 6 из 60.
GameObject > UI > Button - TextMeshPro добавляет кнопку: изображение, по которому можно щёлкнуть, компонент Button и дочерний объект Text (TMP) для её подписи. onClick кнопки — это событие, список методов, которые она вызывает, когда щелчок по ней отпускают. Скрипт добавляет собственный метод в этот список с помощью AddListener один раз — в Start(). Button находится в пространстве имён UnityEngine.UI:
using UnityEngine;
using UnityEngine.UI;
public class Doorbell : MonoBehaviour
{
public Button bellButton;
private int rings;
void Start()
{
bellButton.onClick.AddListener(Ring);
}
void Ring()
{
rings++;
Debug.Log("Ding! " + rings);
}
}AddListener(Ring) передаёт сам метод, без скобок. AddListener(Ring()) сразу вызвал бы Ring и передал бы то, что он возвращает, то есть ничего, поэтому код не скомпилируется: Argument 1: cannot convert from 'void' to 'UnityEngine.Events.UnityAction'. Обработчик события не принимает параметров и возвращает void. Если добавить его в Update(), тот же метод будет снова добавляться в список каждый кадр, и одно нажатие приведёт к сотням звонков. Нажатие засчитывается, только если оно сделано непосредственно по кнопке, а Input.GetMouseButtonDown(0) возвращает true при нажатии где угодно.
Свойство interactable кнопки определяет, можно ли её использовать. bellButton.interactable = false; окрашивает её цветом Disabled Color, а её обработчики события не вызываются, пока свойству не вернут значение true, поэтому игрок видит, какие кнопки сейчас работают. На телефоне по тем же кнопкам нажимают касанием.
Задание
ЛегкоСделай так, чтобы кнопки «Вверх» и «Вниз» лифта работали.
- В
Start()свяжиupButtonсGoUp(floor++), аdownButtonсGoDown(floor--) с помощьюonClick.AddListener. - Напиши
ShowFloor(), вызываемую вStart()и после каждого перемещения: координата y лифта равнаfloor * floorHeight, а вfloorTextотображаетсяFloor: 2. - Кнопка «Вверх» доступна, пока лифт не достиг
topFloor, а кнопка «Вниз» — пока он выше 0.
Нажми «Играть»: на верхнем этаже кнопка «Вверх» станет неактивной. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class Lift : MonoBehaviour
{
public Button upButton;
public Button downButton;
public TMP_Text floorText;
public int topFloor = 3;
public float floorHeight = 3f;
private int floor;
void Start()
{
// Привяжите upButton и downButton к методам, которые перемещают лифт на один этаж
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity