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

.

Теперь, когда мы улучшили нашу игру визуально, поработав с частицами, мы добавим какие-нибудь звуки и музыку в нашу игру.

Вы увидите, как легко это делается в Unity и насколько интересней станет ваша игра.

Ищем звуки для нашей игры

Начнем подыскивать звуковый файлы для нашей игры. Самое главное — сохраняйте все свои звуки в несжатом 8bit .wav формате. В дальнейшем, в самом Unity можно будет сжать звук, не изменяя исходного файла. Вот, что мы можем сделать:

  • Купить мелодию.
  • Попросить знакомого музыканта.
  • Использовать бесплатные звуки из звуковых банков (например, FindSounds or Freesound).
  • Записать звук самому.

С музыкой немного сложнее, но тоже все решаемо:

  • На сайте Jamendo много музыки разных музыкальных направлений. Будьте осторожны с лицензиями для коммерческих целей.
  • Иногда любители выкладывают свою музыку на рутрекере.
  • Воспользуйтесь продуктом Bosca Ceoil от Терри Кавана для создания своей, неповторимой мелодии.

Итак, создайте или найдите звуки взрыва и выстрела. Если вам лень, вы можете использовать эти:

Мы будем использовать один из треков игры «Больное бумажное приключение», Спинтроник для этого урока:

Импорт звука в Unity

Переместите 4 звуковые дорожки в папку «Sounds». Убедитесь, что для каждой из во вкладке «Инспектор» отключен «3D звук» (так как мы делаем 2D игру) и нажата кнопка «Применить». Вот и все.

Для воспроизведения музыки, просто перетащите песню во вкладку «Иерархия» (Hierarchy). Мы приглашаем Вас:

  1. Переименуйте новый игровой объект в «Музыка».
  2. Поместите его на .

Обратите внимание на флажок «Mute». Это может вам пригодиться в ваших тестах. Со звуками придется повозиться, поскольку они должны проигрываться в определенное время. Для решения этой задачи напишем новый скрипт под названием «SoundEffectsHelper»:

Добавьте этот скрипт в игровой объект и заполните его поля со звуковыми клипами:

Затем выполните:

  1. в «HealthScript», только после воздействия частиц.
  2. в «PlayerScript», сразу после .
  3. в «EnemyScript», сразу после .

Запустите игру и прислушайтесь. Да, у нас теперь есть звуки и музыка!

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

Мы только что узнали, как использовать звуки и музыку в нашей игре. Теперь давайте добавим меню, чтобы мы могли начать и перезапустить наш уровень.

Меню — загрузка и перезапуск игры

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

Создание легкого меню или азы Unity скриптинга

Мы находимся в ситуации, когда нам позарез нужно меню для управления игрой.

К сожалению, Unity не располагает инструментами для создания создать красивых меню и, даже используя сторонние библиотеки, приходится повозиться. В этом уроке мы не будем строить сложный графический интерфейс, поэтому воспользуемся встроенными инструментами. Давайте начнем с основ. Сохраните следующие картинки:

Это наши фон и логотип. Импортируйте их в проект. Вы можете поместить их в «Меню» — подпапку «Текстуры». В противном случае «фон» сотрет предыдущий файл игры. Для кнопок мы будем использовать стандартные (уродливые) кнопки Unity.

Главное меню

Настало время создать сцену с главным меню. Это то, что показывается юзеру при запуске игры. Для начала, создайте новую сцену:

  1. «File» -> «New scene».
  2. Сохраните ее в папке «Scenes» как «Menu».

Вы можете также нажать (OS X) или (Windows).

Наше главное меню будет состоять из:

  • Фона.
  • Логотипа.
  • Скрипта, который будет отображать кнопки.

Для фона:

  1. Создайте новый спрайт.
  2. Установите его в .
  3. Задайте размер .

Для логотипа:

  1. Создайте новый спрайт.
  2. Установите его в
  3. Задайте размер

Вот, что у вас должно получиться:

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

Теперь мы добавим кнопку «начать игру» с помощью скрипта. Создать скрипт по имени «MenuScript» в папке «Scripts», и приложите его к новому пустому игровому объекту под названием «Scripts»:

О синтаксисе можете подробнее почитать здесь GUI.Button.

Мы просто рисуем кнопку, которая будет загружать сценe «Stage1», когда игрок нажимает на нее.

Метод применяется в каждом кадре и вставляет весь код, в котором отображен элемент GUI: полоса жизни, меню, инт
ерфейс и т.д. Объект позволяет нам быстро создать компоненты GUI из кода, как кнопка с методом .

Теперь запустите игру и полюбуйтесь нашим замечательным меню:

Жмем и… Катастрофа!

То, что нам нужно сделать четко написано в сообщении об ошибке.

Добавление сцен в сборку

Нажмите в меню Unity на «File», затем на «Build Settings»:

Теперь перетащите все сцены, которые должны быть в вашей игре. Здесь все просто: это «Меню» и «Stage1».

Вернитесь в меню. Нажмите на кнопку и … играть!

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

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

Наконец, мы позволим игроку начать игру сначала после того, как его персонаж умер. И, как вы, возможно, заметили, заметили происходит достаточно часто. Давайте «упростим» игру. Вот, что у нас сейчас происходит:

  1. Игрок попадает под пули.
  2. запускается.
  3. Игрок теряет 1 единицу здоровья.
  4. «HealthScript» уничтожае игрока, так как у него меньше, чем 1 единица здоровья.

Мы добавим два новых действия:

  1. Вызывается .
  2. Создается «GameOverScript» и добавляется к сцене.

Создайте в папке «Scripts» новый скрипт по имени «GameOverScript». Это маленький кусочек кода, который будет отображать кнопки «Начать сначала» и «Назад в меню»:

Это абсолютно идентично первому скрипту, который мы написали, с двумя кнопками.

Теперь, в «PlayerScript», нам нужно привязать этот новый скрипт к смерти:

Запустите игру и попытайтесь умереть (это не должно занять много времени):

Вы можете найти скрипт где-то на сцене:

Конечно, вы можете улучшить скрипт, например, добавив в него счет или анимациИ.

Если вы хотите провернуть что-нибудь эдакое, можете создать «GUI Skin».

  • «Assets» -> «Create» -> «Gui Skin»:

Вы можете изменить интерфейс в «Inspector», чтобы сделать игру более интересной. Убедитесь в том, что этот скин лежит в папке «Resources» (Ресурсы).

Папка «Resources» занимает в Unity особое место. Чтобы загрузить ее содержимое, используйте метод . Так вы получите возможность добавлять объекты прямо во время игры, и эти объекты могут быть созданы самими пользователями (как насчет модов?).

Тем не менее, скин не применяется до тех пор, пока вы не вызовите его в вашем скрипте. Во всех наших предыдущих сценариях GUI, мы должны загрузить скин только один раз, а не в каждом кадре, используя .

Вот пример в «MenuScript» (проследите, как действует метод ):

Как видите, нам пришлось изрядно попотеть чтобы сделать банальное неанимированное меню. Мы только что узнали как сделать меню для нашей игры. Поздравляем, вы только что сделали полноценный игровой продукт! Но, к сожалению, эта игра только на вашем компьютере. Чтобы продать ее, мы должны заявить о ней миру. Это как раз то, о чем мы будем говорить с вами в следующем уроке по Unity.

Внимание! Этот документ ещё не опубликован.

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

Что понадобится сегодня?

Unity3D — версия не имеет значения.

Интерфейс — знание движка в лицо, ну или хотя бы со стороны.
Прямые руки — с рождения.

Часть первая. Подготовка к работе.

1. Для начала, конечно же, откройте сам Unity3D и создайте новый, чистый проект. А как? File —> New Project…
2. Создайте его в пути, не имеющий кириллицы. И не отмечайте галочки, нам вполне сойдет стандартный набор инструментов.
3. Перед нами голый проект, на котором мы создадим ваше первое меню.

4. Создайте новый скрипт нажатием ПКМ (правой кнопкой мыши), во вкладке Project.
Create —> JavaScript.
5. Назовем его TextControl. Щелкните два раза ЛКМ (левой кнопкой мыши) по названию скрипта.

Часть вторая. Сборка сцены.

6. В свежей сцене создайте Plane и четыре куба через вкладку GameObject —> Create Other —> Plane, Cube.
7. Так же добавьте Point Light для эффекта.

8. У вас должно получится что-то в этом духе.

9. Теперь создайте три 3D текста. GameObject —> Create Other —> 3D Text. Не забудьте развернуть их по оси Y на 180 градусов.

10. Расположите текст так, чтобы они были в середке кубиков. Текст можно вписать в Inspector —> Text Mesh —> Text.
Получилось вот что.

11. Выделите все объекты в Hierarchy и нажмите сочетание клавиш Ctrl+D.
12. Отодвиньте все объекты вправо и переименуйте текст в Fastest, Fantastic и Cancel.

13. Камеру находящаяся над главный меню назовите Camera1, а вторую, находящуюся над настройками графики, Camera2.
14. Создайте папочку Scenes нажатием ПКМ во вкладке Project.

Делаем игру на Unity 5. Создание главного меню #1

Create —> Folder.
15. Сохраните сцену под названием MainMenu и поместите ее в папку Scenes. File —> Save Scene.
Если все идеально, должно получится прямо как у меня.

Часть третья. Контроль текста.

16. Откройте скрипт TextControl и приготовьтесь писать.

17. Для начала давайте создадим переменную isNewGameButton, при которой объект будет загружать сцену.

var isNewGameButton = false;

Примечание: Почему false? Потому-что при true переменная будет срабатывать сразу.

18. Лучше не раскатывать тесто, и сразу выставить нужные переменные.

var isOptionsButton = false; var isQualityButtonFastest = false;   var isQualityButtonFantastic = false;   var isMainMenuButton = false; var isQuitButton = false;

19. Теперь давайте разберем самое интересное. При входе на объект курсора мыши, его материал моментально изменяется.

Вход:

function OnMouseEnter()   {

Выход:

function OnMouseExit()   {

Смена материала на серый цвет при входе курсора будет осуществляться таким образом:

function OnMouseEnter()   {   renderer.material.color = Color.gray;   }

А возвращение материала в прежний вид при выходе курсора выглядит так:

function OnMouseExit()   {   renderer.material.color = Color.white;   }

Примечание: Белый цвет, точнее Color.white, возвращает обычный цвет текстуре.

20. Сейчас мы начнем делать нажатие на объекты.

Нажатие осуществляется через:

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

Для начала возьмем переменную IsQuitButton:

function OnMouseUp()   {   if ( isQuitButton )   {   Application.Quit();   }

Примечание: Application.Quit() осуществляет выход из игры полностью.

Теперь возьмем переменную ужасной графики.

else if ( isQualityButtonFastest )   {   QualitySettings.currentLevel = QualityLevel.Fastest;   }

Примечание: else дает возможность работать в OnMouseUp() много раз. А QualitySettings.currentLevel = QualityLevel.Fastest изменяет графику на уровне.

else if ( isQualityButtonFantastic )   {   QualitySettings.currentLevel = QualityLevel.Fantastic;   }

Примечание: Тоже самое что и выше, но теперь с максимальной графикой.

Теперь возьмем переменную загрузки уровня.

else if ( isNewGameButton ) {   Application.LoadLevel (1);    }

Примечание: Application.LoadLevel () дает возможность загружать уровень. А число в скобках пишут для точной загрузки нужного левела.

21. Теперь поработаем с камерами. Создайте новые две переменные:

var camera1:Camera;   var camera2:Camera;

А теперь продолжите таким образом:

else if ( isOptionsButton )   {     camera1.enabled = false;   camera2.enabled = true;   }

Примечание: Мы работаем с нажатием, и таким образом, когда вы щелкаете на кнопке Options, первая камера отключается, а вторая начинает функционировать.

22. Ну и последнее что нам нужно, это возвращение из игры в меню.

else if ( isMainMenuButton ) {   Application.LoadLevel (0);    }

Добавьте в конце закрывающуюся скобку }.

23. Проверяем.

var isNewGameButton = false; var isOptionsButton = false; var isQualityButtonFastest = false;   var isQualityButtonFantastic = false;   var isMainMenuButton = false; var isQuitButton = false;   var camera1:Camera;   var camera2:Camera;   function OnMouseEnter()   {   //color.X — any color that you like renderer.material.color = Color.gray;   }   function OnMouseExit()   {   //color.X — any color that you like renderer.material.color = Color.white;   }   function OnMouseUp()   {   if ( isQuitButton )   {   Application.Quit();   }
   else if ( isQualityButtonFastest )   {   QualitySettings.currentLevel = QualityLevel.Fastest;   }   else if ( isQualityButtonFantastic )   {   QualitySettings.currentLevel = QualityLevel.Fantastic;   }   else if ( isNewGameButton ) {   //it can be any level Application.LoadLevel (1);    } else if ( isOptionsButton )   {     camera1.enabled = false;   camera2.enabled = true;   } else if ( isMainMenuButton ) {   //main menu level Application.LoadLevel (0);    } }

Часть четвертая. Сборка меню.

24. Назначьте готовый скрипт ко всем кнопкам в сцене.
25. Теперь смотрим в Inspector —> Text Control (Script) и разбираем.

Для начала выберите кубик с New Game и поставьте галочку Is New Game Button.
Затем щелкните кубик с Options и поставьте галку Is Options Button. А еще в поле Camera 1 вставьте первую камеру, а в поле Camera 2, вторую.
На кубике Quit галку Is Quit Button.

Сейчас мы переходим на место с настройками. Выделите куб Fastest и поставьте галочку Is Quality Button Fastest. Так же Fantastic, но уже Is Quality Button Fantastic.
Выделите кнопку Cancel, поставье галочку Is Options Button, и вставьте в поле Camera 1 вторую камеру, а в поле Camera 2, первую.
Примечание: Почему? Потому-что нам нужен обратный процесс.

Для загрузки сцены (1), то есть, Is New Game Button, при компиляции, выставьте уровень под нужным вам числом. И не забудьте изменить значение в скрипте!

Так же, если потребуется выйти из уровня обратно в меню, используйте переменную Is Main Menu Button.

26. Теперь посмотрим что получилось.

Если все в порядке, значит я не зря писал данный урок 🙂
А если возникли какие-то проблемы, пишите, помогу всем, чем смогу.
Спасибо за внимание, с вами был Валентин. Желаю успехов в игрострое!

Ну а в следующем уроке я расскажу, как улучшить меню в плане возможностей 😉

2 марта 2011

#Unity3D, #unityscript, #меню, #новичок

.

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

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