Как сделать меню паузы в unity3d

Обновлено: 07.07.2024

Любой нормальной игре нужно меню, хотя бы простое должно быть. Менюшки делятся на два вида, экран приветствия и внутриигровое меню. Иногда их делают одинаковыми, но на наш взгляд это не совсем удачное решение. В процессе игры, главная задача меню, обеспечить быстрый доступ к основным настройкам, без нагромождения графических украшений и прочей мишуры. В общем, NULLcode Studio представляет Вам проект меню, которое предназначено для использования как внутриигровое, то есть, при вызове ставит игровой процесс на паузу и дает возможность настроить: аудио, видео, клавиши управления и прочее.

  • Сохранение настроек в файл.
  • Проверка файла сохранения на наличие ошибок.
  • Настройки разрешения экрана.
  • Настройки качества изображения.
  • Настройки режима экрана: Полноэкранный / В окне.
  • Изменение клавиш управления.

Примечание:
В редакторе Unity список разрешений экрана недоступен.

Использование:
Перетащите на сцену префаб GameMenu_UI, а также в сцене должен быть объект EventSystem, если его нет, то добавьте GameObject -> UI.

_menu - если меню активно, то true.
soundValue, musicValue - для звуков и музыки соответственно.
keys - массив клавиш управления.

Пример. Допустим надо, чтобы персонаж двигался вперед, какой элемент массива использовать? Считать надо сверху вниз в меню настроек управления, как и в обычном массиве.

Меню для игры [Unity Project]

Всё достаточно просто.

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

Я сделал кнопку Пауза на экране, используя Canvas - Button.

Также я сделал код для Pause в скрипте Platformer2DUserControl.

Вот код этого скрипта:

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

Я хочу сделать это, когда я нажимаю кнопку игры, просто останавливаясь, а персонаж не прыгает.

Как я могу это сделать. Спасибо за помощь.

Я бы посоветовал вам не использовать один и тот же ввод для прыжков и пауз. Кроме того, отделите свои функции перехода и паузы на отдельные функции. Чтобы сделать паузу, создайте кнопку UI на экране и сделайте ее вызовом публичной функции на скрипте Pause, который переключит паузу. Затем, в той же функции, проверьте, приостановлена ли вы или нет, и отрегулируйте Time.timecale соответственно

Вам нужно будет прикрепить сценарий с функцией паузы к объекту, который всегда будет на экране (скажите, панель на вашем холсте или ваш MainCamera). Под кнопкой добавьте новую функцию onClick() после перетаскивания GO с помощью сценария apt в поле. Затем выберите публичную функцию, указанную выше.

Надеюсь, это помогло!

Похоже, вы хотите, чтобы ваш персонаж прыгал, когда вы нажимаете на экран, а не когда они нажимают на кнопку.

Я предлагаю просто проверить, где пользователь нажал. В функции обновления у вас может быть псевдокод ниже. При этом я не очень понимаю вашу ситуацию, поэтому могу ошибаться. Например, это мобильное устройство, но вы не используете touch и touch.position? Надеюсь, это поможет в любом случае.

Я всегда делал это так, по существу, окружал все фиксированное обновление (или везде, где у вас есть игровое движение) с помощью paused-bool

Одно из возможных решений позволит убедиться, что кнопка raycast on pause.

Ну, ваш код испорчен, но просто удалите скрипт перехода из метода паузы. Поэтому он просто остановится.

Обратите внимание, что Input.GetButton должен вызываться только в Update

РЕДАКТИРОВАТЬ

Проблема в том, что вам нужно нажать на экран, чтобы нажать кнопку. И код jump = Input.GetButton("Fire1"); в основном означает "Я нажимаю экран?" Таким образом, запускаются JUMP и PAUSE.

Одним из решений было бы поместить холст, заполняющий весь экран под вашими кнопками. Вы будете запускать действие JUMP только при нажатии этого холста. Поэтому, когда вы нажимаете кнопку паузы, она прекращает распространение и не будет нажимать полноэкранный холст, который не вызовет действие перехода.

Без меню игроку не изменить настройки, не сохраниться или не загрузить прошлый прогресс. Объясняем, как сделать меню в Unity.

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

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

Для создания интерфейсов, в том числе и меню, в Unity используются
UI-объекты. К ним относятся:

  • кнопки;
  • изображения;
  • списки;
  • слайдеры;
  • чекбоксы;
  • выпадающие списки и другие элементы.

Чтобы работать с ними, нужно создать объект Canvas и дать ему понятное название. Например MenuCanvas. Добавьте в него объект Panel и задайте какое-нибудь фоновое изображение или цвет.

После этого можно начинать верстать меню. Создайте внутри MenuCanvasобъект типа Empty и назовите его MainMenu. Внутрь него можно добавить элементы типа Text и Button.

Менять надпись на кнопке можно с помощью вложенного объекта Text. Добавьте их столько, сколько вам необходимо. Затем разместите их на холсте так, чтобы получить что-то вроде этого:


Ваше главное меню готово. Нужно ещё добавить отдельные подменю для настроек, сохранения и загрузки.

Как добавить несколько меню в Unity

Чтобы создать несколько экранов меню, добавьте ещё несколько объектов типа Empty и поместите новые элементы в них. Например, в этом проекте будут созданы SaveMenu, LoadMenu и SettingsMenu.

При добавлении объекта он становится активным, поэтому все кнопки и слайды будут просто налезать друг на друга. Чтобы отключить какое-нибудь меню, нажмите на его объект и в Inspector возле его названия уберите галочку.

Этому действию соответствует метод SetActive(), который можно использовать, чтобы переключать меню при нажатии кнопки. Для этого выберите кнопку и в окне Inspector найдите поле On Click ().

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


На скриншоте показано отключение основного меню и включение меню с сохранениями при нажатии кнопки SaveButton. Сделано всё это без использования кода.

Как создать меню настроек в Unity

Отдельно рассмотрим создание настроек игры. Чтобы реализовать их, нужно сначала сверстать меню с помощью объектов Toggle, Dropbox и Slider:


Дальше создайте скрипт Menu.cs и прикрепите его к MenuCanvas: он будет отвечать за работу со всеми настройками.

В него нужно добавить следующие библиотеки: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //Работа с интерфейсами using UnityEngine.SceneManagement; //Работа со сценами using UnityEngine.Audio; //Работа с аудио

Затем добавьте эти поля: public bool isOpened = false; //Открыто ли меню public float volume = 0; //Громкость public int quality = 0; //Качество public bool isFullscreen = false; //Полноэкранный режим public AudioMixer audioMixer; //Регулятор громкости public Dropdown resolutionDropdown; //Список с разрешениями для игры private Resolution[] resolutions; //Список доступных разрешений private int currResolutionIndex = 0; //Текущее разрешение

Не забудьте добавить в скрипт выпадающий список и регулятор громкости:


Теперь можно заняться основным функционалом. В первую очередь нужно создать метод, который будет открывать меню в игре. public void ShowHideMenu() < isOpened = !isOpened; GetComponent ().enabled = isOpened; //Включение или отключение Canvas. Ещё тут можно использовать метод SetActive() >

Вызываться этот метод будет при нажатии на кнопку Esc: void Update() < if(Input.GetKey(KeyCode.Escape)) < ShowHideMenu(); >>

Дальше нужно создать методы, которые будут вызываться при изменении настроек в меню: public void ChangeVolume(float val) //Изменение звука < volume = val; >public void ChangeResolution(int index) //Изменение разрешения < currResolutionIndex = index; >public void ChangeFullscreenMode(bool val) //Включение или отключение полноэкранного режима < isFullscreen = val; >public void ChangeQuality(int index) //Изменение качества

Выберите необходимый объект, например, список с уровнями качества, и добавьте обработчик события On Value Changed.


Добавьте вызов этого метода при нажатии на кнопку сохранения настроек.

Меню можно улучшить, если сделать автоматическое добавление всех доступных разрешений: resolutionDropdown.ClearOptions(); //Удаление старых пунктов resolutions = Screen.resolutions; //Получение доступных разрешений List options = new List (); //Создание списка со строковыми значениями for(int i = 0; i

Теперь остается только функция сохранения.

Как создать сохранение в Unity

Сохранения представляют собой файлы, в которых хранится информация о текущем состоянии игровых объектов:

  • позиции игрока;
  • уровне;
  • мане;
  • здоровье;
  • опыте и так далее.

Чтобы можно было всё это удобно преобразовать в файл, используется сериализация — специальный инструмент, который позволяет сохранить объект в формате JSON или XML. Лучше сохранять всё в виде бинарных файлов, потому что так игроки не смогут изменить характеристики своего персонажа.

Чтобы сохранить данные (координаты, наличие предметов в инвентаре, здоровье), создается класс SaveData:

Теперь понадобится дополнительный класс, который будет отвечать за сохранение и загрузку данных:

Созданные методы будут вызываться из класса Character:

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

Заключение

Полученных из статьи знаний хватит, чтобы создавать другие интерфейсы в игре:

Редактор Unity позволяет добавлять настраиваемые меню, которые выглядят и ведут себя как встроенные меню. Пользовательское меню обеспечивает удобный способ прямого доступа к часто используемым функциям из редактора. В этом курсе я предоставлю реальные примеры использования для каждой описанной темы, чтобы проиллюстрировать, как элементы меню в единстве создаются и используются.

Добавить пункт меню

Результат приведенного выше кода выглядит следующим образом:



горячая клавиша

Чтобы суперпользователи и пользователи, которым нравится пользоваться клавиатурой, работали быстрее, мы можем связать горячую клавишу для нового пункта меню - использование сочетания клавиш автоматически запускает их пункт меню.
Вот назначенные клавиши (их также можно использовать в комбинации):

% -CTRL в Windows / CMD в OSX

& -Alt
клавиши курсора ВЛЕВО / ВПРАВО / ВВЕРХ / ВНИЗ
F1…F12
HOME,END,PGUP,PDDN
Буквенная клавиша не является частью последовательности клавиш. Чтобы добавить буквенную клавишу в последовательность клавиш, необходимо добавить подчеркивание впереди (например: _g соответствует сочетанию клавиш "G").
Комбинация сочетаний клавиш добавляется после пути к пункту меню и разделяется пробелом. Пример показан ниже:


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

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

Особый путь

Display, путь, переданный свойству MenuItem, определяет, в какое меню верхнего уровня будет помещен новый пункт меню. В Unity есть несколько специальных путей, которые действуют в контекстных меню (меню, доступных по щелчку правой кнопкой мыши):

CONTEXT / ComponentName - пункт меню появится в данном компоненте
в контекстном меню (меню, отображаемое при щелчке правой кнопкой мыши).
Ниже показаны некоторые примеры использования специальных путей:

Результат приведенного выше фрагмента кода выглядит следующим образом:

Проверка

Некоторые пункты меню доступны только при определенных обстоятельствах, в противном случае их следует отключить. Добавьте метод аутентификации, чтобы включить / отключить пункт меню в соответствии с его контекстом.
Метод проверки является статическим и использует метод, отмеченный свойством MenuItem, и это свойство передает значение true в качестве параметра проверки.
Этот метод проверки должен иметь тот же путь, что и метод команды меню, и он должен иметь логическое возвращаемое значение, чтобы подтвердить, активировано или отключено меню.
Например, метод проверки можно использовать для контекстного меню текстуры в представлении проекта:


Если щелкнуть правой кнопкой мыши непроизвольную текстуру, этот пункт меню будет отображаться серым цветом:

Приоритет меню управления

Приоритет - это номер, присвоенный пункту меню (третий параметр, переданный в MenuItemde), который управляет порядком отображения меню.
пункты меню также могут быть автоматически сгруппированы, одна группа на каждые 50:


В приведенном выше примере кода показана следующая структура, пункты меню разделены на две группы:

Другие родственные классы

Некоторые связанные классы для добавления пунктов меню перечислены ниже.

MenuCommand

ContextMenu

ContextMenuItem

Это свойство добавляется в поле класса компонента .Выше показано, что свойство ContextMenu добавляет пункт меню в контекстное меню компонента, а затем свойство ContextMenuItem добавляет пункт меню в контекстное меню поля.
Поскольку этот атрибут добавляется в поле, метода нет, поэтому он принимает два параметра: один используется для отображения имени элемента меню, а другой используется для указания того, который будет вызываться при выборе меню. Метод экземпляра.
Пример. Добавление метода для случайной инициализации поля:


Результат приведенного выше кода показывает пункт меню, который появляется при щелчке правой кнопкой мыши по полю:

AddComponentMenu

GenericMenu

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

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