Menu
CoddyTech

Кнопки и onClick

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

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, поэтому игрок видит, какие кнопки работают сейчас. На телефоне по тем же кнопкам нажимают.

challenge icon

Задание

Легко

У лифта в башне есть кнопки «Вверх» и «Вниз». Напиши Lift.cs (сцена связывает upButton, downButton и floorText):

  • В Start() привяжи к upButton метод, который поднимает лифт на один этаж, а к downButton — метод, который опускает его на один этаж.
  • Этажи идут от 0 до topFloor (3). Лифт находится на высоте y = этаж × floorHeight (3), поэтому на этаже 2 его y равен 6. Значения x и z остаются прежними.
  • С самого начала floorText отображает этаж в формате Floor: 2.
  • На верхнем этаже кнопка «Вверх» недоступна для нажатия, а на этаже 0 недоступна кнопка «Вниз».

Нажми Play, поднимись на верхний этаж и вернись обратно, затем нажми Check.

Попробуйте сами

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 к методам, которые перемещают лифт на один этаж
    }
}
quiz iconПроверьте себя

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

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