Как сделать кнопку в unity

Обновлено: 07.07.2024

Решение нашлось в документации Unity, ссылку уже потерял.

Вариант 1 : Для тех уже более менее разобрался в работе Unity.

1.1 В script вставляем следующее:

1.2 Назначаем на кнопку данную функцию

Вариант 2: Для тех кто новичок, пошагово ниже:

2.1 Создаем script с названием change и в него вставляем следующее:

2.2 Создаём кнопку

2.2 Создаем пустой объект

И называем его Exit или на ваше усмотрение.

2.3 Перетащить наш скрипт в объект, как на фото:

2.4 Назначить кнопке действие выход, фото ниже:

Как перетащите в кнопку объект Exit в No Function необходимо задать выход. (фото ниже)

На этом все, теперь сохраняйте проект и проверяйте выход.

Вариант 3: Для тех кто будет использовать клавишу Esc

3.1 В скрипте, что обрабатывает игровой процесс вставляем следующий код:

3.2 Если используете кнопку-крестик, назначьте вызов функции по клику по этой кнопке.

В этом уроке мы затронем библиотеку Scene Management, чтобы сделать переход между сценами по кнопке. Это одна из самых простых вещей, но она необходима для создания игры.


Чтобы создать новую сцену, щелкните правой кнопкой мыши по панели ассетов и выберите Create > Scene.

В этих сценах нам нужно создать элементы, с помощью которых мы будем переходить между сценами. Сделать это можно различными способами, но для облегчения понимания будем использовать самый простой способ. Мы будем создавать объект SceneChanger, который будет обрабатывать весь код изменения сцены.

Обычно, когда сцена сменяется от одной к другой, все экземпляры игровых объектов, сценариев и т. д., принадлежащие этой сцене, уничтожаются, а загружаются экземпляры из новой. Другой метод заключается в использовании функции DontDestroyOnLoad (), которая будет поддерживать ссылку на объект при смене сцены, но об этом следует поговорить в другом уроке.

Создание объекта и префаба SceneChanger


Откроем скрипт в Visual Studio и напишем следующий код:


Создание пользовательского интерфейса

В пользовательском интерфейсе у нас будет текстовый объект с указанием названия сцены и кнопка, которая будет изменять сцену.

Итак, щелкните правой кнопкой мыши на вкладке Hierarchy и выберите UI> Panel .

Снова щелкните правой кнопкой мыши на вкладке Hierarchy и выберите UI> Text .

Еще раз щелкните правой кнопкой мыши на вкладке Hierarchy и выберите UI> Button .

Ваш конечный результат должен выглядеть примерно так




Перетащим объект SceneChanger из иерархии в ссылку на объект (выделено красным цветом)


Теперь нужно выбрать функцию (выделено красным). В раскрывающемся списке выберите SceneChanger> ChangeScene (string).

Сейчас нужно добавить сцены в Build Settings в File menu . Это необходимо, так как без этого Unity не распознает cцены, и между ними не произойдет никакого перехода.

Нажмите на кнопку воспроизведения. Нажатие на кнопку в сцене приведет к переходу к другой сцене.

Виртуальные оси и кнопки могут быть созданны в Input Manager , и конечные пользователи смогут настраивать ввод с клавиатуры на экране конфигурационного диалогового окна.

Вы можете настроить джойстики, геймпады, клавиатуру и мышь, затем обращаться к ним через один простой скриптовый интерфейс.

Virtual Axes

  • Horizontal и Vertical привязаны к w, a, s, d и клавишам направления.
  • Fire1 , Fire2 , Fire3 привязаны к клавишам Control, Option (Alt) и Command соответственно.
  • Mouse X и Mouse Y привязаны к перемещениям мыши.
  • Window Shake X и Window Shake Y привязаны к перемещению окна.

Добавление новых осей ввода

Если вы желаете добавить новые виртуальные оси, перейдите в меню Edit->Project Settings->Input . Здесь вы можете также изменить настройки каждой оси.


Используйте эти параметры для точной настройки внешнего вида ввода. Также, все они задокументированы во всплывающих подсказках в редакторе.

Использование осей ввода из скриптов

Однако изменения осей Mouse и Window Shake показывают, насколько мышь или окно сдвинулись по сравнению с последним кадром. Это значит, что они могут быть больше, чем 1 или меньше, чем –1, когда пользователь быстро двигает мышь.

Можно создавать несколько осей с одним именем. При получении ввода, будет возвращаться ось с наибольшим абсолютным значением. Это позволяет назначить больше одного устройства ввода на одно имя оси. Например, создайте одну ось для ввода с клавиатура и одну ось для ввода с джойстика с одинаковым именем. Если пользователь использует джойстик, ввод будет идти с джойстика, иначе ввод будет идти с клавиатуры. Таким образом, вам не нужно учитывать откуда приходит ввод при написании скриптов.

Названия кнопок

Чтобы назначить кнопку оси, вам необходимо ввести имя кнопки в свойстве Positive Button или Negative Button в окне Inspector .

Keys (Клавиши)

  • Обычные клавиши“: ”a“, ”b“, ”c" …
  • Цифровые клавиши: “1”, “2”, “3”, …
  • Клавиши стрелок: “up”, “down”, “left”, “right”
  • Клавиши цифровой клавиатуры: “[1]”, “[2]”, “[3]”, “[+]”, “[equals]”
  • Клавиши модификаторов: “right shift”, “left shift”, “right ctrl”, “left ctrl”, “right alt”, “left alt”, “right cmd”, “left cmd”
  • Клавиши мыши: “mouse 0”, “mouse 1”, “mouse 2”, …
  • Кнопки джойстика (от любого джойстика): “joystick button 0”, “joystick button 1”, “joystick button 2”, …
  • Кнопки джойстика (от заданного джойстика): “joystick 1 button 0”, “joystick 1 button 1”, “joystick 2 button 0”, …
  • Специальные клавиши: “backspace”, “tab”, “return”, “escape”, “space”, “delete”, “enter”, “insert”, “home”, “end”, “page up”, “page down”
  • Функциональные клавиши: “f1”, “f2”, “f3”, …

Названия, используемые для определения кнопок одни и те же при написании скриптов и в окне Inspector.

Ось может иметь значение от –1 до 1. На нейтральное положение указывает 0. Note also that the keys are accessible using the KeyCode enum parameter.

Нужно сделать в прямом смысле кнопку: встал игроком на неё - она нажалась, сработало нечто-то. Сошел - действие прекратилось. Действие (например) - движение сферы вперед по оси X с именем MovingSphere.

Подскажите, как это сделать? Быть может у вас есть исходный код или ссылка на статью. Гуглинг нашел только GUI-кнопки..

Не имею ни малейшего понятия как сделать эффект нажатия на кнопку (чтобы продавливалась и возвращалась в исходное состояние при схождении), а так же как всё это время посылать события на MovingSphere (подозреваю в Update() кнопки просто вызываем изменение позиции сферы, если некоторый boolean говорит о том, что кнопка нажата)

Mr F
хм, хорошо, а как насчет эффекта: наступил - продавилась, сошел - вернулась в исходное положение? (причем, чтобы этот эффект был плавны, а не имел всего 2 состояния: нажато и отжато)?

nexen
По срабатыванию тригера в скрипте плавно нажимать и соответственно при покидании триггера возвращать.
Или ты хочешь именно физическое взаимодействие?

Executor
именно физическое, если мы правильно поняли друг друга. Т.е. чтобы кнопка нажималась медленно, если на неё "наступают" медленно и, наоборот, быстро, если быстро.
Просто по сути кнопка должна быть чем-то типа пружины, которая выпрямляется, когда на неё ничего не давит, но как сделать такую "пружину", к которой можно было бы привязать нажатие. К тому же, так как она будет физической, то вполне может быть, что любое лишнее движение, будучи на кнопке (персонаж бегает вперед-назад) может вызвать ложное срабатывание или, наоборот, ложное выключение.

к чему такие сложности?
напиши простецкий скрипт, содержащий один флаг и два вектора.

когда на коллайдер наступают, меняй флаг в true
когда с коллайдера сходят, меняй флаг в false
если флаг = true, двигай кнопку к вектору1, иначе двигай кнопку к вектору2

E-Cone
потому что есть 3 объекта с весом 1, 2, 3. Чтобы нажать на кнопку, вес должен быть 7. Под каждый из объектов кнопка продавливается по разному, более того, в некоторых моментах мне бы хотелось сделать её упругой (т.е., если кинуть на неё куб весом 1, то кнопка должна его немного отпружинить). Более того, сам игрок весит 2, так что одними падающими кубиками дело не обходится.

веса 1, 2, 3 приведены для примера.

хм.. в таком случае прикрепляй ее к полу слайдер-джоинтом и в каждом кадре прикладывай к ней силу, направленную вверх. или можно обойтись без джоинтов, а просто через код фиксировать максимальное и минимальное значение высоты..

Можно сделать фейковое нажатие. Над кнопкой поместить область триггера. Проверяй объекты, взаимодействующие с этим триггером. Суммируй их массы, смещай кнопку вниз, якобы она вдавилась, и если суммарная их масса удовлетворяет условию, выполняй нужное действие.

Читайте также: