Как сделать меню в юнити
Перейти к содержимому

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

  • автор:

Создание главного меню в unity

Помогите подсказать общую реализацию, как сделать главное меню. Игру я хочу сделать на телефон. В главном меню будет виден список всех уровней. Получается, при клике на иконку уровня будет открываться данный по счету уровень. Я не знаю, как точно сделать. Сделать так, чтобы определенный скрипт на камере проверял нажатие на все уровни(Это очень много условий if) и запускалась определенная сцена или можно сделать как-нибудь иначе?

Отслеживать
задан 9 дек 2017 в 9:24
Artemka_naydanov Artemka_naydanov
113 1 1 серебряный знак 12 12 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Могу предложить такой вариант:

    Создаем такой скрипт:

class SceneLoad : MonoBehaviour < public int sceneIndex; public void OnBtnClick() < SceneManager.LoadScene(sceneIndex); >> 

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

Создание игрового меню

Для начала создадим игровой объект типа UI – Canvas, где и будут располагаться все элементы нашего интерфейса. Далее настраиваем наш Canvas в окне Inspector следующим образом:

  1. В поле Render Mode выбираем Screen Space – Camera. Это нужно, чтобы наш канвас привязать к нашей игровой камере.
  2. В поле Render Camera перетаскиваем объект нашей камеры из окна Hierarchy.
  3. В поле UI Scale Mode выбираем Scale With Screen Size.
  4. В поле Reference Resolution указываем Х=1920 Y=1080. Если Вы создаёте игру для мобильных устройств, то установите Х=1080 Y=1920

Далее создадим ещё 2 игровых объекта типа UI – Image, Первый объект будет служить фоном игрового меню. Назовём его Background. А второй объект будет фоном для области с настройками. Назовём его FonOptions. Поместим их внутрь канваса, и настроим их в окне Inspector.

  1. В поле Source Image перетаскиваем наши фоновые изображения (Background и fonOptions).
  2. Устанавливаем необходимые размеры Width и Height у компонента Rect Transform. Для объекта Background это 1920×1080. А для FonOptions укажите такие значения, которые удобны для Вас.

Далее создадим 4 кнопки: «Начать игру», «Настройки», «Выход», и «Возврат в главное меню». Для этого создаём 4 игровых объекта типа UI – Button. Назовём их BtnStart, BtnOptions, BtnEnd, и BtnReturn. Настраиваем кнопки в поле Inspector следующим образом:

  1. В поле Source Image перетаскиваем изображения наших кнопок из окна Project.(Start, options, exit, return) .
  2. В поле Preserve Aspect поставьте галочку, чтобы изображение стало пропорциональным по сторонам.

Остался последний штрих. Сейчас необходимо сгруппировать две наши области. Первая область будет включать в себя все 3 кнопки. Вторая область будет включать в себя область настроек, вместе с кнопкой возврата в главное меню.

Для создания таких областей создадим 2 новых и пустых игровых объекта. Назовём их Area1 и Area2.

В первый игровой объект перетащим 3 кнопки(BtnStart, BtnOptions, BtnEnd). А во второй игровой объект перетащим одну кнопку(BtnReturn) и фоновую картинку(FonOptions). Объект Area2 временно отключим в окне Inspector, сняв галочку с объекта.

Программная часть

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

Кнопка «Начать Игру»

Кнопка «Начать Игру» должна запускать сцену с игрой. Для этого создадим C# скрипт с названием, например, StartGame, и пропишем в него следующий код.

using UnityEngine; using UnityEngine.SceneManagement; public class StartGame : MonoBehaviour < public void StartGame() < SceneManager.LoadScene("Game"); >>

Код для кнопки «Начать Игру» готов! Обязательно убедитесь, что у вас имеется сцена с названием Game.

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

  1. Добавить в объект нашей кнопки BtnStart данный скрипт.
  2. В поле On Click() Выбираем наш метод StartGame()

Теперь создаём C# скрипт для кнопки «Выход», назовём его ExitGame, и пропишем в него следующий код.

using UnityEngine; using UnityEngine.SceneManagement; public class ExitGame : MonoBehaviour < public void ExitGame() < Application.Quit(); >>

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

  1. Добавить в объект нашей кнопки BtnEnd данный скрипт.
  2. В поле On Click() Выбираем наш метод ExitGame()

Кнопка «Настройки» должна закрывать область(объект Area1) с тремя основными кнопками, и открывать область(объект Area2) с настройками. Здесь нам не нужно писать какие-либо скрипты, всё уже написано за нас. Осталось их просто подключить. Для этого выполняем следующие действия:

  1. В окне Hierarchy выбираем объект нашей кнопки настроек BtnOptions
  2. В окне Inspector, в поле On Click() создаём событие, выбрав GameObject – Set Active (bool). Перетаскиваем В данное поле объект Area1. ГАЛОЧКУ НЕ СТАВИМ!
  3. Здесь же, создаём второе событие, только перемещать будем объект Area2. ГАЛОЧКУ СТАВИМ!

Готово, теперь осталось сделать кнопку возврата в главное меню. Для этого делаем с кнопкой BtnReturn всё то же самое, что и в предыдущем примере, только наоборот.

  1. В окне Hierarchy выбираем объект нашей кнопки возврата BtnReturn
  2. В окне Inspector, в поле On Click() создаём событие, выбрав GameObject – Set Active (bool). Перетаскиваем В данное поле объект Area1. ГАЛОЧКУ СТАВИМ!
  3. Здесь же, создаём второе событие, только перемещать будем объект Area2. ГАЛОЧКУ НЕ СТАВИМ!

Наше меню полностью готово! Если вам понравилась статья, буду рад вашим лайкам.

Урок #5 — Главное меню

Урок #5 - Главное меню

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

Видеоурок

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

Меню действий по нажатию unity

Отследить нажатие правой кнопкой мыши по объекту -> вызвать меню действий. Гайдов о том как это сделать в интернете много.

22 мая 2022 в 9:32

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Создаем первый скрипт:

using UnityEngine; using UnityEngine.Events; public class Targeting : MonoBehaviour < public UnityEventOnTarget = new UnityEvent(); public UnityEvent OnMiss = new UnityEvent(); private Camera _camera; private void Awake() < _camera = Camera.main; >private void Update() < if (Input.GetMouseButtonDown(1)) < TrySetTarget(); >> private void TrySetTarget() < var ray = _camera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit raycastHit) && raycastHit.transform.TryGetComponent(out Target target)) < OnTarget?.Invoke(target); >else < OnMiss?.Invoke(); >> > 

введите сюда описание изображения

Вешаем его на камеру:

Создаем второй скрипт:

using System.Collections.Generic; using UnityEngine; public class Target : MonoBehaviour < public ListActions => _actions; [SerializeField] private List _actions = new List(); > 

введите сюда описание изображения

вешаем на каждый объект, у которого хотите вызывать меню (допустим куб):

создаем третий скрипт:

using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class ContextMenu : MonoBehaviour < [SerializeField] private Targeting _targeting; private List_currentActions = new List(); private void Awake() < _targeting.OnTarget.AddListener(Show); _targeting.OnMiss.AddListener(Hide); gameObject.SetActive(false); >private void OnDestroy() < _targeting.OnTarget.RemoveListener(Show); _targeting.OnMiss.RemoveListener(Hide); >public void Show(Target target) < gameObject.SetActive(true); _currentActions = target.Actions; transform.position = Input.mousePosition; >public void Hide() < gameObject.SetActive(false); >> [System.Serializable] public struct ContextMenuAction

введите сюда описание изображения

Этот скрипт вешаем на на UI панельку и даем ссылку на камеру:

введите сюда описание изображения

Теперь для таргетов зададим список действий. Возьмем тот самый куб и добавим деактивацию коллайдера:

Теперь в при нажатии правой кнопкой мыши в контекстное меню передастся список структур, которые хранят название и событие действия. С вашей стороны необходимо создать список кнопок, где текст на кнопке и действие будет передаваться при каждом нажатии на объект, надеюсь вы с этим справитесь:)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *