Пятница, 19 Апреля 2024, 18:49

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Покупаете ли вы конструкторы игр?
Всего ответов: 11293
Главная » Статьи » Создание игр

Разрабатываем меню в 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. Открыв редактор, перед вами появится вас скрипт, который будет абсолютно пустой, но с базовым содержанием:

Код

using UnityEngine;
using System.Collections;
public class Menu1 : MonoBehaviour {
  // Use this for initialization
  void Start () {
  }
  // Update is called once per frame
  void Update () {
  }
}

Строка
Код
public class [u]Menu[/u] : MonoBehaviour {
, в замен слова Menu будет содержать название вашего скрипта. Строку трогать и изменять не нужно. По крайней мере в данном уроке.

Шаг 5: Отредактируем скрипт под меню, для этого можно удалить некоторые строки, которые вам не понадобятся в этом уроке:
Код

// Use this for initialization - этот комментарий нам не нужен

// Update is called once per frame
void Update () {
} - метод Void нам тоже не понадобится


Шаг 6: Наш скрипт подготовлен для создания на нем меню игры.
Перед методом void Start создадим переменную для нумерации окон в меню игры.
Содержании строки такое:
Код
public int window;

public int - задаем числовое значение переменной
window - название переменной, которая будет использоваться в скрипте с числовым значением

Шаг 6: Для правильной работы меню, при старте работы скрипта у нас должно отображаться одно содержимое, для этого в метод void Start добавим стартовое значением переменной window. Весь метод будет выглядеть так:
Код

void Start () {
window = 1;
}


Метод при старте исполнения скрипта будет назначать переменной window значение 1

[b]Шаг 7:
Начнем саму работу с GUI выводом меню, для этого создадим ниже метода void Start, метод в выводом GUI. Выглядеть он будет так:
Код

void OnGUI () {
}


Данный метод в программе Unity3D и в вашем создаваемом приложении вызовет вывод графических элементов.

Шаг 8: Чтобы меню отображалось по центру экрана и не приходилось для каждой кнопки рассчитывать местоположение, создадим группу, которая будет выводить свое содержимое по центру экрана:
Код

GUI.BeginGroup (new Rect (Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 200));
GUI.EndGroup ();


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, то есть
Код

GUI.BeginGroup (new Rect (Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 200));
Сюда !!!
GUI.EndGroup ();

Напишем выдаваемое значение при window = 1:
Код

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 == 1) - если windows равно значению 1, то создадим вывод
if(GUI.Button (new Rect (10,30,180,30), "Играть")) - создаем кнопку "Играть"
{window = 2;} - если нажата кнопка "Играть", то window получит значение 2
С остальными кнопка так же.

Шаг 10: Создадим вывод, если переменная window равно 2
Код

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;
}
}


Выводим кнопки, которые доступны при нажатии на кнопку "Играть". Вывод ни чем не отличается о предыдущих кнопок, расшифрую только новые функции:
Debug.Log("Уровень 1 загружен"); -
Application.LoadLevel(1); - вызываем функцию, которая загружает уровень игры. 1 - можно менять на нужный вам уровень. Числовое значение можно брать, если нажать на сочетании клавиш Ctrl + Shift + B.

Шаг 11: Создаем вывод, если window имеет значение 3:
Код

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;
}  
}

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

Шаг 12: Выводим содержимое, если значение у window 4
Код

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;
}  
}


Шаг 13: Выводим содержимое, если переменная window имеет значение 5 и нажата кнопка "Выход"
Код

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;
}
}

В данном выводе из новых функций, только она:
Application.Quit(); - данная функция выключает приложении при нажатии кнопки "Да".
P.S. Функция не работает в редакторе Unity3D, она работает только в скомпилированном проекте.

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



На данный момент это первый урок, в будущем появятся еще пару, которые научат делать полностью функциональное меню

Автор скрипта: SeveralStudios

Источник: КЛИК»
Категория: Создание игр | Добавил: severalstudios (24 Сентября 2013) | Автор: Александр
Просмотров: 63450 | Комментарии: 35 | Рейтинг: 3.8/44 |
Теги: уроки для начинающих, Разработка игр, создание меню, Unity3D, C#, уроки
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Разрабатываем меню в Unity3D (Создание базовой части) [Часть 1]», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 351 2 »
+0-
35 Сталекс   (10 Июля 2016 12:30) [Материал]
СталексНачинаю с нуля. Неделю лазил по инету, все мозги окончательно заплел, но так и не смог найти ответы на простейшие вопросы. Везде только и начинают кричать "не засерайте сайт, не плодите темы, пошел на ... гугл!". А вот здесь нашел то, что надо! Пусть, как некоторые умники говорят, не все термины правильные - пофиг! Зато все понятно и все работает! Огромное спасибо! Специально зарегистрировался, чтобы отблагодарить!

+2-
34 hamster98   (16 Сентября 2014 19:40) [Материал]
hamster98Ну во первых: статья имеет право жить. Новичкам очень поможет.
Во вторых: автор получает заслуженный плюс. Хоть я и пишу на JS.
В третьих: не нравится статья - идите лесом. А автор - молодец!

+-2-
33 Aleks_Vast   (04 Октября 2013 13:44) [Материал]
мда, отличные пользователи, налетели на пацана, ну прямо как вороны на сыр

+0-
31 RockDigger   (29 Сентября 2013 21:04) [Материал]
RockDiggerКажется администрации пора принимать меры против появления на сайте подобных глупых и безграмотных статей, что-то наподобие хабровской песочницы надо сделать, чтобы на страницы сайта попадали только грамотные и правильно отредактированные статьи!
Цитата
В уроке будут использоваться функции:
1) public int - назначение переменной числовым значением
2) GUI.BeginGroup - создание GUI группы
3) GUI.Button - Создание GUI кнопки
4) Debug.Log - вывод сообщения в консоли
5) Application.LoadLevel - загрузка уровня
6) Application.Quit - закрытие игры

Если аффтар считает функцией простое объявление целочисленной переменной, то чему он собирается учить? Да и слог у писателя такой, что даже я закоренелый троечник по русскому языку в шоке!

+1-
30 Novatorvlad   (29 Сентября 2013 12:10) [Материал]
NovatorvladСкажу одно - зачем еще одна статья ? Хватит, дети, писать о простом. Пишите о сложном.

+-2-
18 severalstudios   (25 Сентября 2013 23:48) [Материал]
severalstudiosв общем вывод такой: вскорем времени будет в одном из журналов про игрострой, который распространяется по русскоязычным странам, будет написана статья о сайте, благодаря вам двум тролям, она будет испорчена, спасибо за внимание.

+3-
19 EchoIT   (26 Сентября 2013 09:16) [Материал]
EchoITНет, чувак,, пожалуйста, не надо! Я прошу тебя, мне это очень важно. Я не смогу пережить такого позора, ведь чужой сайт там засрут благодаря мне, и это прочтут миллионы людей! cry

+-1-
23 severalstudios   (26 Сентября 2013 10:22) [Материал]
severalstudiosпродолжаем выслушивать твой троллинг

+2-
26 Undead   (26 Сентября 2013 15:21) [Материал]
UndeadПросто у тебя попоболь.

+1-
25 Undead   (26 Сентября 2013 15:21) [Материал]
Undeadbiggrin biggrin biggrin

+0-
32 DARKLORD   (30 Сентября 2013 19:16) [Материал]
DARKLORDПортят сайт такие статьямейкеры. Вон сосед с меню на Game-Maker походу у тебя учится. biggrin

+4-
13 EchoIT   (25 Сентября 2013 20:56) [Материал]
EchoITДа он постоянно сам себе противоречит постоянно. Мне в ЛС написал, что понижать репутацию в ответ на что-то - выходка школоты, однако сам понижает репутацию в ответ на моё сообщение, лол. biggrin

+4-
14 Undead   (25 Сентября 2013 21:07) [Материал]
UndeadТы же обидел его. Однокласники теперь над ним смеются. biggrin

+-2-
16 severalstudios   (25 Сентября 2013 23:35) [Материал]
severalstudiosесли бы так все было бы просто, но увы, одноклассников нет, так как это уже в прошлом. А вот понятие в данном портале одно: за анализ портала 4 мя годами, здесь кроме тролей, таких как вы, которые обычным пользователям не помогут статьями, зная и умея в данной сфере, но обтролить спокойно смогу.

+-1-
28 Undead   (26 Сентября 2013 15:23) [Материал]
UndeadТебе 100500 раз сказали, что твая статья - дерьмо.

+-2-
29 severalstudios   (27 Сентября 2013 18:29) [Материал]
severalstudiosмолодец, возьми булочку с полочки

+0-
15 severalstudios   (25 Сентября 2013 23:33) [Материал]
severalstudiosэмм, твое сообщение было первым, я на него ответил репутацией, ты же на мою репутацию своей ответил

+3-
21 EchoIT   (26 Сентября 2013 09:20) [Материал]
EchoITШта? Ты мне в ответ на мое сообщение понизил репутацию, а потом сказал, что это выходка школьника. Чего теперь придумывать какие-то отмазки?

+-1-
22 severalstudios   (26 Сентября 2013 10:22) [Материал]
severalstudiosЭмм, логика твоя не поняла моих сообщений, я не собираюсь перед тобой объясняться, делать нечего перед тролем объясняться

+2-
24 EchoIT   (26 Сентября 2013 12:24) [Материал]
EchoITТы вообще сам понимаешь, что ты пишешь? Я - нет.

+-4-
9 severalstudios   (25 Сентября 2013 17:02) [Материал]
severalstudiosтебя тут никто не спрашивал влезать в наш разговор

+4-
8 Undead   (25 Сентября 2013 15:53) [Материал]
UndeadПерлы доставили. Особенно эти:
    1) public int - назначение переменной числовым значением
    метод Void нам тоже не понадобится

Да и сразу видно, что автор полный нуб в программировании. Зачем это писать нужно было?

+-4-
10 severalstudios   (25 Сентября 2013 17:13) [Материал]
severalstudiosкаждый в праве писать то, что захочет, так что ваше мнение мне не интересно

+2-
11 Undead   (25 Сентября 2013 17:20) [Материал]
UndeadДля того, что бы писать туторы, нужно быть компетентным в теме.
А ты же просто нуб smile

+3-
12 Undead   (25 Сентября 2013 17:22) [Материал]
UndeadКак уже сказал EchoIT, зачем захламлять сайт шлаком?

+-1-
17 severalstudios   (25 Сентября 2013 23:40) [Материал]
severalstudiosну а что, конечно легко сказать, а если на портале есть пользователи, которые ищут подобные статьи. Если же вы знаете, то почему ближнему не поможете, написав статью полезную. Дак нет, ваше дело критика и троллинг, помощь убираем в сторону, в общем каждый сам за себя

+3-
20 EchoIT   (26 Сентября 2013 09:18) [Материал]
EchoITКакой толк от твоей статьи, если её невозможно читать из-за того, что ты не умеешь лексически правильно строить предложения?

+5-
27 Undead   (26 Сентября 2013 15:22) [Материал]
UndeadЯ помогаю пользователям советами, прмерами кода. Но не здесь.

+-4-
6 severalstudios   (24 Сентября 2013 15:45) [Материал]
severalstudiosкаждый смотрит по своему,

1-10 11-11
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Construct Classic
  • RTADS
  • Sylphis 3D
  • Eclipse Wold
  • Creatry
  • Construct 3
  • GameDirector
  • BatteryTech
  • Garry's mod
  • 3D Game engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг