Привет! Мы добавили кнопку (Button), но при нажатии ничего не происходит. Это будет короткий и простой гайд, где мы напишем скрипт меняющий текст для определённого Text при нажатии на кнопку. А ещё сделаем из кнопки счётчик. Почему бы и нет?
Погнали!
Скрипты для Button
Добавим в ассеты папку Scripts, а в ней создадим C# Script с именем ButtonClick.
Открываем его. Добавляем зависимость для работы с UI.
1 |
using UnityEngine.UI; |
Переменную для текста, который буем редактировать:
1 |
private Text textToEdit; |
Вообще вариантов такого скрипта несколько. Можно повесить скрипт на отдельный элемент и просто перетянуть текст в редакторе, или скрипт повесить на кнопку с аналогичной схемой. Но я решил, что скрипт редактируемого текста лучше оставить на тексте. Так что просто пропишем его инициализацию в Start():
1 2 3 4 |
void Start() { textToEdit = GetComponent<Text>(); } |
И простейшую функцию для изменения текста:
1 2 3 4 |
public void ChangeText() { textToEdit.text = "New Text"; } |
Результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using UnityEngine; using UnityEngine.UI; public class ButtonClick : MonoBehaviour { private Text textToEdit; void Start() { textToEdit = GetComponent<Text>(); } public void ChangeText() { textToEdit.text = "New Text"; } } |
Как я и сказал, вешаем его на Text, который будем изменять. Буквально перетягиваем скрипт в инспектор. Он должен быть отображен как один из компонентов.
Теперь выделяем Button, ищем OnClick и нажимаем на плюсик:
Сюда перетягиваем Text со скриптом:
И в списке с функциями находим нашу функцию:
Всё. Можно запускать! Нажимаем на кнопку и видим наш текст!
Делаем из кнопки счётчик
Пускай теперь на кнопке ещё и будет отображено количество нажатий? Это тоже легко сделать. Давайте добавим ещё скрипт ButtonCounter.
Его содержимое практически совпадает с предыдущим, так что вот сразу весь код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using UnityEngine; using UnityEngine.UI; public class ButtonCounter : MonoBehaviour { private Text textToEdit; private int totalClicks = 0; void Start() { textToEdit = GetComponentInChildren<Text>(); } public void ChangeText() { totalClicks += 1; textToEdit.text = totalClicks.ToString(); } } |
В этот раз вешаем скрипт на саму кнопку. Ей же добавляем функцию в OnClick().
Запускаем ещё раз и кликаем:
Функции в примере бесполезные, зато чётко показывают как работает обработка клика. По сути мы можем написать скрипт с эффектом тряски для камеры, разместить его на камере, а кнопке дать лишь объект камеры. И это будет работать.
Кстати, обработку клика можно совершать, конечно же, и в коде. Пример в официальной документации тут!
На этом всё, спасибо за внимание!
Пингбэк: Уроки по Unity – GeekStand