Как создать внутриигровое меню в Unity.
Разрабатываем меню в Unity3D (Создание базовой части) [Часть 1]
Здравствуйте уважаемые игроделы.
На просторах интернета уроков по созданию игр в Unity3D очень много, но на верхнем слое и направленных новичкам очень мало.
В данном серии уроков, я буду расписывать о создании меню игры при помощи стандартного GUI, не использую нестандартные компоненты.
Урок направлен для новичков, которые желают научится создавать свое меню в игре.
По окончанию первого урока у вас получится меню игры с работающими кнопками:
В уроке будут использоваться функции:
1) public int – назначение переменной числовым значением
2) GUI.BeginGroup – создание GUI группы
3) GUI.Button – Создание GUI кнопки
4) Debug.Log – вывод сообщения в консоли
5) Application.LoadLevel – загрузка уровня
6) Application.Quit – закрытие игры
Итак, начнем:
Шаг 1: Создаем в окне Project C# скрипт и называем его по своему.
Шаг 2: Создаем игровую камеру:
* На верхнем меню программы нажимаем пункт GameObject
* После нажатия появляется выпадающее меню, в нем нажимаем пункт Create Other
* В появившемся списке нажимаем на строку с названием Camera и после этого действия в окне Hierarchy появляется объект Camera
Шаг 3: Назначаем объекту Camera скрипт, который создали в первом шаге. Для этого в окне Project находим ваш скрипт, у меня он называется Menu, и перетягиваем его в окно Hierarchy на объект Camera.
Чтобы удостовериться в правильности хода нужно: нажать на объект Camera в окне Hierarchy. В окне Inspector вы у объекта увидите такое одержимое:
Если же у вас появилась выделенная на изображении строка с названием вашего скрипта, то сделали вы все правильно.
Шаг 4: Откроем скрипт в редакторе. Для этого нажмите на ваш скрипт двойным нажатием левой кнопки мыши в окне Project. У вас откроется редактор скриптов, в моем случае это MonoDevelop. Открыв редактор, перед вами появится вас скрипт, который будет абсолютно пустой, но с базовым содержанием:
, в замен слова Menu будет содержать название вашего скрипта. Строку трогать и изменять не нужно. По крайней мере в данном уроке.
Шаг 5: Отредактируем скрипт под меню, для этого можно удалить некоторые строки, которые вам не понадобятся в этом уроке:
200?’200px’:”+(this.scrollHeight+5)+’px’);”>
// Use this for initialization – этот комментарий нам не нужен
// Update is called once per frame
void Update () <
> – метод Void нам тоже не понадобится
Шаг 6: Наш скрипт подготовлен для создания на нем меню игры.
Перед методом void Start создадим переменную для нумерации окон в меню игры.
Содержании строки такое:
public int – задаем числовое значение переменной
window – название переменной, которая будет использоваться в скрипте с числовым значением
Шаг 6: Для правильной работы меню, при старте работы скрипта у нас должно отображаться одно содержимое, для этого в метод void Start добавим стартовое значением переменной window. Весь метод будет выглядеть так:
Метод при старте исполнения скрипта будет назначать переменной window значение 1
[b]Шаг 7: Начнем саму работу с GUI выводом меню, для этого создадим ниже метода void Start, метод в выводом GUI. Выглядеть он будет так:
Данный метод в программе Unity3D и в вашем создаваемом приложении вызовет вывод графических элементов.
Шаг 8: Чтобы меню отображалось по центру экрана и не приходилось для каждой кнопки рассчитывать местоположение, создадим группу, которая будет выводить свое содержимое по центру экрана:
GUI.BeginGroup – создаем группу
(new Rect – задаем значение, что дальше будут даны данные о расположении самой группы
(Screen.width / 2 – 100, – задаем расположение группы относительно ширины экрана
Screen.height / 2 – 100, – задаем расположение группы относительно высоты экрана
200 – задаем ширину группы
200 – задаем высоту группы
Значения ширины и высоты можно свои ставить, но чтобы все было по центру аккуратно в Screen.width / 2 – 100, Screen.height / 2 – 100 значение 100 заменяем на свое значение. То есть если же ваша группа будет иметь ширину и высоту 300, то в замен 100 вы должны ввести половину от ширины 300. Вводимое значение будет 150.
Шаг 9: Создаем вывод меню, если переменная window = 1. Для этого, между началом и концом группы, созданной в шаге №8, то есть
if(window == 1) – если windows равно значению 1, то создадим вывод
if(GUI.Button (new Rect (10,30,180,30), “Играть”)) – создаем кнопку “Играть”
– если нажата кнопка “Играть”, то window получит значение 2
С остальными кнопка так же.
Шаг 10: Создадим вывод, если переменная window равно 2
Выводим кнопки, которые доступны при нажатии на кнопку “Играть”. Вывод ни чем не отличается о предыдущих кнопок, расшифрую только новые функции:
Debug.Log(“Уровень 1 загружен”); –
Application.LoadLevel(1); – вызываем функцию, которая загружает уровень игры. 1 – можно менять на нужный вам уровень. Числовое значение можно брать, если нажать на сочетании клавиш Ctrl + Shift + B.
Шаг 11: Создаем вывод, если window имеет значение 3:
В данном шаге новых функций не используется, поэтому просто добавляем. В следующих уроках будет расписано о создании функциональности, для настройки игры.
Шаг 12: Выводим содержимое, если значение у window 4
Шаг 13: Выводим содержимое, если переменная window имеет значение 5 и нажата кнопка “Выход”
В данном выводе из новых функций, только она:
Application.Quit(); – данная функция выключает приложении при нажатии кнопки “Да”.
P.S. Функция не работает в редакторе Unity3D, она работает только в скомпилированном проекте.
Скрипт готов, если же вы делали все по шагам, то у вас появится меню, которое было показано на изображении вначале.
200?’200px’:”+(this.scrollHeight+5)+’px’);”>
public class Menu : MonoBehaviour <
public int window;
void Start () <
window = 1;
>
void OnGUI () <
GUI.BeginGroup (new Rect (Screen.width / 2 – 100, Screen.height / 2 – 100, 200, 200));
if(window == 1)
<
if(GUI.Button (new Rect (10,30,180,30), “Играть”))
<
window = 2;
>
if(GUI.Button (new Rect (10,70,180,30), “Настройки”))
<
window = 3;
>
if(GUI.Button (new Rect (10,110,180,30), “Об Игре”))
<
window = 4;
>
if(GUI.Button (new Rect (10,150,180,30), “Выход”))
<
window = 5;
>
>
if(window == 2)
<
GUI.Label(new Rect(50, 10, 180, 30), “Выберите уровень”);
if(GUI.Button (new Rect (10,40,180,30), “Уровень 1”))
<
Debug.Log(“Уровень 1 загружен”);
Application.LoadLevel(1);
>
if(GUI.Button (new Rect (10,80,180,30), “Уровень 2”))
<
Debug.Log(“Уровень 2 загружен”);
Application.LoadLevel(2);
>
if(GUI.Button (new Rect (10,120,180,30), “Уровень 3”))
<
Debug.Log(“Уровень 3 загружен”);
Application.LoadLevel(3);
>
if(GUI.Button (new Rect (10,160,180,30), “Назад”))
<
window = 1;
>
>
if(window == 3)
<
GUI.Label(new Rect(50, 10, 180, 30), “Настройки Игры”);
if(GUI.Button (new Rect (10,40,180,30), “Игра”))
<
>
if(GUI.Button (new Rect (10,80,180,30), “Аудио”))
<
>
if(GUI.Button (new Rect (10,120,180,30), “Видео”))
<
>
if(GUI.Button (new Rect (10,160,180,30), “Назад”))
<
window = 1;
>
>
if(window == 4)
<
GUI.Label(new Rect(50, 10, 180, 30), “Об Игре”);
GUI.Label(new Rect( 10, 40, 180, 40), “Информация об разработчике и об игре”);
if(GUI.Button (new Rect (10,90,180,30), “Назад”))
<
window = 1;
>
>
if(window == 5)
<
GUI.Label(new Rect(50, 10, 180, 30), “Вы уже выходите?”);
if(GUI.Button (new Rect (10,40,180,30), “Да”))
<
Application.Quit();
>
if(GUI.Button (new Rect (10,80,180,30), “Нет”))
<
window = 1;
>
>
GUI.EndGroup ();
>
>
На данный момент это первый урок, в будущем появятся еще пару, которые научат делать полностью функциональное меню
Как создать меню для игры на Unity
Без меню игроку не изменить настройки, не сохраниться или не загрузить прошлый прогресс. Объясняем, как сделать меню в Unity.
Если вы уже немного понимаете, как работать в Unity, и попробовали что-то создать, пора научиться верстать игровые меню. Если нет, прочтите для начала статью о создании игры.
Здесь будут описаны общие моменты, с полной версией проекта можно ознакомиться, скачав его из репозитория на GitHub.
Для создания интерфейсов, в том числе и меню, в Unity используются
UI-объекты. К ним относятся:
- кнопки;
- изображения;
- списки;
- слайдеры;
- чекбоксы;
- выпадающие списки и другие элементы.
Чтобы работать с ними, нужно создать объект Canvas и дать ему понятное название. Например MenuCanvas. Добавьте в него объект Panel и задайте какое-нибудь фоновое изображение или цвет.
После этого можно начинать верстать меню. Создайте внутри MenuCanvas объект типа Empty и назовите его MainMenu. Внутрь него можно добавить элементы типа Text и Button.
Менять надпись на кнопке можно с помощью вложенного объекта Text. Добавьте их столько, сколько вам необходимо. Затем разместите их на холсте так, чтобы получить что-то вроде этого:
Ваше главное меню готово. Нужно ещё добавить отдельные подменю для настроек, сохранения и загрузки.
Евгений Кучерявый
Пишет о разработке сайтов, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.
Как добавить несколько меню в Unity
Чтобы создать несколько экранов меню, добавьте ещё несколько объектов типа Empty и поместите новые элементы в них. Например, в этом проекте будут созданы SaveMenu, LoadMenu и SettingsMenu.
При добавлении объекта он становится активным, поэтому все кнопки и слайды будут просто налезать друг на друга. Чтобы отключить какое-нибудь меню, нажмите на его объект и в Inspector возле его названия уберите галочку.
Этому действию соответствует метод SetActive(), который можно использовать, чтобы переключать меню при нажатии кнопки. Для этого выберите кнопку и в окне Inspector найдите поле On Click ().
В нём описаны действия, которые будут выполняться при клике на кнопку.
На скриншоте показано отключение основного меню и включение меню с сохранениями при нажатии кнопки SaveButton. Сделано всё это без использования кода.
Как создать меню настроек в Unity
Отдельно рассмотрим создание настроек игры. Чтобы реализовать их, нужно сначала сверстать меню с помощью объектов Toggle, Dropbox и Slider:
Дальше создайте скрипт Menu.cs и прикрепите его к MenuCanvas: он будет отвечать за работу со всеми настройками.
В него нужно добавить следующие библиотеки:
Как создать главное меню игры в Unity 5
В этом уроке мы разберем как создать главное меню игры в Unity 5. Меню мы будем делать при помощи UI, добавленного в Unity 5.
Начнем с того, что создадим Canvas. ПКМ по серой зоне в иерархии и создадим UI->Canvas, который мы назовем MainMenu. Canvas – это объект, в котором будут храниться все элементы меню нашей игры. Разберемся с его основными компонентами
Основной компонент, Canvas имеет в себе Render Mode, обладающее следующими вариантами:
- Screen Space – Overlay. Это значит, что данный UI будет отображаться перед каждой камерой в игре.
- Screen Space – Camera. В данном случае мы выбираем камеру, к которой этот UI будет привязан.
- World Space. В данном случае он будет привязан к мировому пространству и камера будет его видеть только когда наведется на него.
Для начала этого хватит для работы с данным компонентом. Следующий компонент – Canvas Scaler отвечает за масштабируемый интерфейс в игре при разных расширениях экрана.
- Constant Pixel Size отвечает за то, что наш интерфейс будет одного и того же размера, при любых разрешениях экрана, поэтому когда он будет отображаться нормально в 800×600 режиме, то в 1920×1080 он будет черезвычайно мал. Можно это исправить при мощи “Якорей” или Anchors, но можно просто правильно настроить следующий вариант.
- Scale With Screen Size будет увеличивать размер нашего интерфейса в зависимости от разрешения экрана.
ReferenceResolution означает изначальный размер экрана, под который создан этот UI.
ScreenMatchMode решает, какое действие будет произведено, если экран не является исходным:
Match Width Or Height – будет увеличивать размер интерфейса, распределяя доли увеличения ширины и высоты в соответствии с полосой внизу
Expand – Увеличивает интерфейса при изменении, так что он никогда не будет меньше, чем исходник.
Shrink – Уменьшает интерфейс, так что он не будет больше исходника. - Constant Physical Size Очень похож на Constant Pixel Size, но отличается тем, что там можно выбирать, в какой единице измерения будут производиться расчеты. В самом начале это вам не будет требоваться.
Следующим компонентом является GraphicRaycaster, он используется для настройки лучей(raycast) идущих в наш интерфейс из игрового пространства. Он обладает следующими параметрами:
Ignore Reversed Graphics – Следует ли рассматривать графику, обращенную в сторону от луча
Blocked Objects, Blocking Mask – Объекты, которые будут блокировать луч
Так как у нас в меню ничего не будет стоять перед ним, то этот компонент можно не настраивать. Теперь выставим следующие настройки: Canvas Scaler выставим в значения Scale With Screen Size и Match Width Or Height, а слайдер переместим на 0,5 для того, чтоб наш интерфейс равномерно расширялся по экрану при изменении разрешения.
И наконец приступим к созданию главного меню игры. Выбрав MainMenu при помощи ПКМ создадим новый элемент UI->Panel, который переименуем в MenuBackground. Далее в компоненте RectTransform необходимо сделать так, чтобы якоря были в середине экрана, так как меню будет масштабироваться именно от середины.
Так же необходимо либо вручную, либо при помощи координат width и height сделать такой размер меню, чтоб удовлетворял вашим требованиям. Можно еще поиграться со свойствами компонента Image и выбрать для вашего заднего фона другую картинку или убрать прозрачность.
Теперь, нажимая ПКМ на MenuBackground добавим туда 2 кнопки: Resume и Exit. Расположим их так же относительно центра, или по вашему усмотрению, в любой другой стороне. Не забудте поменять внутри Button есть Text, в котором можно изменить компонент Text и поменять надпись на кнопке. Получилось так:
Можем пока отключить наше меню (выбрав MainMenu и убрав галочку возле имени). В данный момент нам необходимо сделать, чтоб наше меню вылезало при нажатии на кнопку ESC. Для этого создадим новый скрипт MainMenuController и добавим его в компоненты камеры (MainCamera). А в его коде мы напишем:
Источники:
http://gcup.ru/publ/gamedev/razrabatyvaem_menju_v_unity3d_sozdanie_bazovoj_chasti_chast_1/1-1-0-477
http://skillbox.ru/media/code/kak_sozdat_menyu_dlya_igry_na_unity/