Статьи

Начало работы с Unity: завершение нашей игры с меню

Есть несколько методов, используемых для создания меню в Unity, два основных из которых — встроенная система графического интерфейса и использование GameObjects с коллайдерами, которые реагируют на взаимодействие с мышью. С графической системой Unity может быть сложно работать, поэтому мы собираемся использовать подход GameObject, который, я думаю, также более интересен для достижения наших целей.


Unity Web Player Установить сейчас

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

Откройте настройки проигрывателя через верхнее меню, выберите «Редактирование»> «Настройки проекта»> «Проигрыватель» и введите значения ширины и высоты экрана по умолчанию в Инспекторе. Я выбрал мой по умолчанию 600x450px, как показано ниже.

Единый учебник меню UI

Затем вам нужно настроить размер вашего игрового представления со стандартного «Свободный аспект» на «Веб (600 x 450)», иначе вы можете расположить пункты меню вне экрана.

Единый учебник меню UI

Как вы уже видели в превью, сцена нашего меню будет иметь нашу игровую среду в фоновом режиме, поэтому при нажатии кнопки Play вы легко войдете в игру.

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

Единый учебник меню UI

Давайте теперь приступим к созданию сцены меню!


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

Выберите игровую сцену в представлении Project и продублируйте ее, используя Ctrl / Command + D, затем переименуйте копию в «menu» и дважды щелкните ее, чтобы открыть.

Примечание: Вы можете проверить, какая сцена открыта, проверив верхнюю часть экрана, она должна сказать что-то вроде «Unity — menu.unity — ProjectName — Web Player / Stand Alone». Вы не хотите начать случайное удаление частей со своей игровой сцены!

Теперь выберите и удалите игровые объекты GUI и PickupSpawnPoints из Иерархии. Разверните «Player» и перетащите «Main Camera», чтобы он больше не являлся дочерним элементом Player, затем удалите Player.

Единый учебник меню UI

Затем выберите ландшафт и удалите компонент Terrain Collider, щелкнув правой кнопкой мыши и выбрав «Удалить компонент».

Наконец, выберите «Основная камера» и удалите компонент MouseLook, щелкнув правой кнопкой мыши и выбрав «Удалить компонент».

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


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

В верхнем меню выберите «Файл»> «Параметры сборки» и перетащите сцену меню из представления проекта в список «Сценарии в сборке» параметров сборки, как показано ниже.

Единый учебник меню UI

(Убедитесь, что вы переставили сцены так, чтобы «menu.unity» находился вверху, чтобы эта сцена загружалась первой при игре.)

Отлично!


Мы собираемся использовать 3D-текст для нашего меню, поэтому давайте создадим 3D-текст GameObject через верхнее меню: GameObject> Создать другой> 3D-текст, затем переименуем его в «PlayBT». Установите вращение Y текста PlayBT так, чтобы оно соответствовало значению вращения Y вашей основной камеры, чтобы оно было обращено непосредственно к нему и, следовательно, легко читалось.

Выбрав PlayBT, измените текстовое свойство Text Mesh с Hello World на «Play», уменьшите размер символа до 0,1 и увеличьте размер шрифта до 160, чтобы сделать текст более четким.

Примечание. Если вы хотите использовать шрифт, отличный от шрифта по умолчанию, либо выберите шрифт перед созданием 3D-текста, либо перетащите шрифт в свойство шрифта TextMesh в 3DText, а затем перетащите шрифт «Материал шрифта» в список материалов рендеринга сетки, перезаписав его. существующий материал шрифта. Довольно хлопот, я знаю!

Наконец, добавьте Box Collider через верхнее меню: Компонент> Физика> Box Collider. Измените размер Box Collider, чтобы он соответствовал тексту, если он ему не подходит.

Единый учебник меню UI

На этом этапе в учебнике вам действительно нужно открыть и Сцену, и Игровое Представление одновременно, так как теперь вы собираетесь перемещать PlayBT в Сцене, чтобы он был центрирован в Игровом Представлении, как показано ниже. Я рекомендую сначала расположить его горизонтально, используя вид сверху вниз, а затем вернуться к использованию вида в перспективе, чтобы расположить его вертикально с помощью ручек оси.

Единый учебник меню UI
Единый учебник меню UI

Так что наша кнопка Play все настроена. Теперь давайте заставим это играть!


Создайте новый сценарий JavaScript в своей папке сценариев, переименуйте его в «MenuMouseHandler» и добавьте его в качестве компонента игрового объекта PlayBT, перетащив его непосредственно в PlayBT или выбрав PlayBT и перетащив скрипт в его инспектор.

Замените код по умолчанию следующим:

01
02
03
04
05
06
07
08
09
10
11
12
/**
    Mouse Down Event Handler
*/
function OnMouseDown()
{
    // if we clicked the play button
    if (this.name == «PlayBT»)
    {
        // load the game
        Application.LoadLevel(«game»);
    }
}

Мы используем функцию MonoBehaviour OnMouseDown (…) , которая вызывается при каждом щелчке мышью по BoxCollider. Мы проверяем, называется ли нажатая кнопка «PlayBT», и если это так, мы используем Application.LoadLevel (…) для загрузки «игровой» сцены.

Хватит говорить — иди запусти его и наблюдай, как твоя игра оживает, когда ты нажимаешь Play

Примечание. Если вы нажали «Воспроизвести» и обнаружили ошибку с настройками сборки, не беспокойтесь; Вам просто нужно проверить настройки сборки — пересмотрите Шаг 4.


Итак, меню для запуска игры отличное, но технически игра никогда не заканчивается, так как, когда таймер заканчивается, ничего не происходит … давайте исправим это сейчас.

Откройте скрипт CountdownTimer и в нижней части функции Tick() добавьте следующую строку:

1
Application.LoadLevel(«menu»);

Теперь перезапустите игру, и когда время истечет, вы вернетесь в меню! Очень просто!

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


Кнопка справки практически идентична PlayBT практически во всех отношениях, поэтому попробуйте скопировать PlayBT, переименуйте его в HelpBT и расположите его под кнопкой Play. Настройте свойство text так, чтобы оно указывало «Help», а не «Play», и, возможно, уменьшите размер шрифта, как показано ниже — я использовал 100.

Единый учебник меню UI

Теперь откройте сценарий MenuMouseHandler и добавьте следующий блок else if в существующий оператор if .

1
2
3
4
5
6
// if we clicked the help button
else if (this.name == «HelpBT»)
{
    // rotate the camera to view the help "page"
     
}

Если вы проверите предварительный просмотр, вы увидите, что при нажатии кнопки «Справка» камера поворачивается, показывая меню справки. Итак, как нам это сделать?


Благодаря iTween все наше вращение камеры может быть сделано аккуратно и аккуратно в одну строку. Без iTween жизнь не была бы такой же веселой. Как следует из названия, это двигатель анимации, созданный для Unity. Это также бесплатно.

Единый учебник меню UI

Запустите iTween в хранилище активов Unity , затем нажмите «Загрузить / импортировать» и импортируйте все это в свой проект. После того, как он импортирован, вам нужно переместить каталог iTween / Plugins в корень вашей папки Assets .

Единый учебник меню UI

Теперь у вас все готово, чтобы избавиться от жизни!


Возьмите лист бумаги и ручку (или откройте пустой документ) и запишите значение Y вращения вашей основной камеры, как обведено ниже.

Единый учебник меню UI

В режиме просмотра сцены поверните камеру в любом направлении вокруг оси Y, чтобы текст «Воспроизведение» и «Справка» были вне поля зрения и чтобы у вас был хороший фон для страницы справки. Вы можете увидеть мой ниже: я повернулся от -152 до -8.

Единый учебник меню UI

Вернитесь к сценарию MenuMouseHandler и добавьте следующую строку в оператор else if :

1
iTween.RotateTo(Camera.main.gameObject, Vector3(0, -8, 0), 1.0);

Мы используем Camera.main для извлечения основной камеры (определяемой тегом «MainCamera») со сцены и используем iTween.RotateTo (…) для поворота камеры на определенный угол — в моем случае -8 .

(Вам нужно заменить -8 в вышеуказанной строке на текущее вращение вашей камеры.)

Теперь вернитесь к своей сцене и верните камеру в исходное положение, которое вы записали в начале этого раздела, чтобы она была обращена к PlayBT. Запустите игру, нажмите «Справка», и камера начнет вращаться. Woo!

Примечание. Если вы получили сообщение об отсутствии iTween, значит, вы не импортировали его должным образом — вернитесь к шагу 9.

Теперь давайте создадим нашу страницу справки.


Поверните камеру назад к повороту Y на странице справки — в моем случае -8 .

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

Дублируйте HelpBT, переименуйте его в HelpHeader, установите его вращение в положение вашей камеры, измените значение привязки на «верхний центр» и уменьшите размер шрифта — я использовал 60.

Затем скопируйте и вставьте следующий абзац в свойство text :

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

Примечание: стоит отметить, что вы не можете вводить многострочный текст в свойство text; Вы должны напечатать его в другой программе, а затем скопировать и вставить его, так как нажатие ввода / возврата назначает поле.

Наконец, удалите Box Collider и MenuMouseHandler Components в Инспекторе, так как этот текст не нужно нажимать. Надеюсь, у вас получится что-то вроде этого:

Единый учебник меню UI

Теперь перетащите сборный пикап на сцену и поместите его на экран. Я поставил мой, как показано ниже.

Единый учебник меню UI

Затем дублируйте HelpHeader, переименуйте его в HelpPowerups, измените «Якорь» на «верхний левый», скопируйте и вставьте приведенный ниже абзац в текстовое поле.

Зеленый: + 2 балла

Розовый: +/- Случайные очки

Синий: Случайное ускорение »

Переместите это так, чтобы у вас было что-то вроде ниже.

Единый учебник меню UI

Осталось только добавить кнопку «Назад», чтобы вернуться в главное меню.


Дублируйте HelpBT, переименуйте его в BackBT, измените его текст на «Back», установите его на поворот вашей камеры и используйте Scene View, чтобы переместить его в Game View. Я поместил мой в нижнем углу, как показано здесь:

Единый учебник меню UI

Теперь нам просто нужно обновить наш скрипт MenuMouseHandler для обработки щелчков мышью из BackBT. Добавьте следующий блок else if в OnMouseDown() if :

1
2
3
4
5
6
// if we clicked the Back button
   else if (this.name == «BackBT»)
   {
       // rotate the camera to view the menu «page»
       iTween.RotateTo(Camera.main.gameObject, Vector3(0, -152, 0), 1.0);
   }

Это почти идентично предыдущему утверждению iTween, единственное отличие состоит в том, что угол поворота камеры к -152 в моем случае. Вам нужно изменить это число, чтобы исходное вращение вашей камеры по оси Y (записанное вами, помните?)

Теперь все, что вам нужно сделать, это вернуть камеру в исходное положение — значение, которое вы только что добавили в оператор iTween, — чтобы она снова оказалась перед главным меню.

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


Надеюсь, вам понравилось это занятие по началу работы с Unity !

В этой части мы рассмотрели использование GameObjects в качестве пунктов меню и невероятно мощную библиотеку анимации, iTween.

Если вам нужна дополнительная задача, попробуйте с помощью iTween изменить цвет текста на MouseOver, а затем снова на MouseExit. (Вы найдете список обработчиков мыши на этой странице .)

Или добавьте iTween CameraFade, а затем уменьшите его, когда закончится таймер, затем загрузите меню, вместо того, чтобы внезапно завершить игру. Затем вы можете отложить вызов Application.LoadLevel(...) с помощью yield WaitForSeconds(...) .

Дайте мне знать, как вы ладите в комментариях!