Часть 1: Работа с чертежами, пикапами и переменными

Вы всегда хотели создать игру, но не знаете, с чего начать? Или вас просто интересуют игровые технологии?

В этой серии статей мы продемонстрируем, как с помощью Unreal Engine 4 создать игру с боковой прокруткой и упаковать ее для Android. В этой игре будут различные элементы, такие как сбор пикапов / монет, система здоровья, а также вражеский AI. Если вы играли в Марио в прошлом, то вам это понравится. Мы постараемся построить нашу игру только в соответствии с этими принципами, даже если у вас нет опыта программирования.

К концу этой серии мы завершим базовую игру, такую ​​как Mario. Мы начнем с основ Unreal Engine 4, а затем углубимся в чертежи, как работает игровой движок и как работают коллизии и логика.

Начиная

Для начала скачайте UE4 здесь (для загрузки движка необходимо зарегистрироваться). После того, как вы установили движок (довольно просто), запустите Epic Games Launcher.

Затем перейдите на вкладку Новый проект, выберите Blueprint и щелкните шаблон Side Scroller. Убедитесь, что у вас такие же настройки, как показано на изображении ниже. Вы можете назвать свой проект как хотите. После этого нажмите Создать проект в правом нижнем углу, как показано ниже:

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

Есть 2 режима создания игр на движке Unreal Engine. Вы можете использовать только чертежи (чертежи представляют собой визуальный язык сценариев в Unreal Engine) или C ++.

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

Теперь взгляните на ваш контент-браузер и включенные папки:

  • Геометрия: папка Geometry хранит ваши сетки / активы. Рекомендуется хранить все свои ресурсы в этой папке.
  • Манекен: папка Манекен содержит модель нашего персонажа (игрока) и связанные с ней анимации. Они предоставляются UE по умолчанию, когда мы используем шаблон.
  • SideScrollerBP: здесь находится вся логика. В этой папке хранятся все наши БП для игры. Вы можете рассматривать BP как программируемые активы / игровые объекты (если вы работаете с Unity, они похожи на сборные).

Создание пикапа

Сначала создадим простой пикап. Пикап - это то, что мы можем собрать в игре, например монеты. Щелкните правой кнопкой мыши раздел обозревателя содержимого и щелкните класс чертежа.

Затем выберите Актера и назовите новый план как PickupBP.

Дважды щелкните pickup, откроется окно редактора BP.

Щелкните Добавить компонент и выберите Статическая сетка. Сетка похожа на трехмерный объект. Мы хотим добавить что-то в наш PickupBP, чтобы мы могли с ним взаимодействовать.

Справа вы увидите новое свойство под названием Static Mesh. Щелкните по нему и выберите Куб.

Установите размеры вашего куба, как показано на изображении ниже. В основном это устанавливает масштаб (размер) вашего пикапа. Вы можете увеличивать или уменьшать по своему желанию, но эта шкала достаточно хороша.

Снова нажмите Добавить компонент, введите поворот и выберите вращение.

Теперь наш пикап будет вращаться вокруг собственной оси. Теперь поместите свой PickupBP в мир, просто перетащив его в мир.

Теперь, чтобы проверить это, поиграйте в игру, нажав значок Играть или нажав Alt + P. Вы увидите, что ваш пикап вращается, но вы пока не можете его собрать. Это потому, что у нашего пикапа в настоящее время нет столкновений - или, можно сказать, он блокирует столкновения.

Добавление столкновения при подборе

Откройте PickupBP (дважды щелкните) и выберите Static Mesh. Справа вы увидите свойства / детали. Мы изменим настройки столкновения с BlockAllDynamic, что означает блокирование всех столкновений. Измените его на OverlapOnlyPawn, чтобы он обнаруживал столкновения только с Pawn (то есть с нашим персонажем). Вверху среды разработки щелкните Скомпилировать и затем сохраните его.

Теперь снова запустите игру и бегите в пикап. Вы заметите, что теперь можете врезаться в пикап, как в воздух. Это круто, но все же мы хотим собирать это как монету.

Откройте свой PickupBP и выберите Static Mesh - с правой стороны у нас есть некоторые события, которые может генерировать наша сетка. Нам нужно событие, при котором «что-то перекрывает сетку». Щелкните значок + (в моем случае это «вид», потому что я уже создал его) рядом с При перекрытии начала компонента.

Откройте свой PickupBP и перейдите в раздел графика Событие. Напишем наш первый код проекта :)

Вы увидите поле (назовем его узлом) с текстом При перекрытии начала компонента ”. Щелкните и перетащите узел, как показано ниже, и введите «уничтожить актера».

Здесь мы сообщаем событию Begin Overlap: «Если наш персонаж столкнется с вами, уничтожьте себя».

Теперь нажмите Скомпилировать и затем сохраните. Закройте чертеж и начните играть снова, нажав Alt + P или нажав значок Воспроизвести. Вы заметите, что если вы столкнетесь с пикапом, он исчезнет.

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

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

Если вы еще не заметили, у нас есть 3 стрелки для каждого объекта в нашем окне просмотра, которые представляют оси X, Y и Z. Если вы снова сыграете, как только вы столкнетесь с подбираемыми предметами, они исчезнут.

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

Итак, нам нужно иметь что-то, где мы можем хранить наш счетчик подбора и (позже) отображать его. Начнем с того, что запомним наш счетчик отправлений.

Введение переменных

С точки зрения непрофессионала, мы можем определить переменную - это то, где мы можем хранить значение, а также можем его изменять. Мы создадим эту переменную в нашем чертеже персонажа.

Откройте чертеж sideScrollerCharacter:

Вы увидите несколько узлов по умолчанию. Эти узлы контролируют движение нашего игрока, предоставляемое UE по умолчанию. Теперь щелкните значок + рядом с переменной с левой стороны и назовите ее PickupCount.

Справа вы увидите свойства только что созданной переменной. Вы увидите, что у него логический тип. Boolean - это тип переменной, который хранит True / yes или False / no, но мы хотим сохранить в нем число. Так что измените его тип на целое число.

Нажмите Compile и сохраните. Справа вы увидите новое свойство под названием значение по умолчанию. Значение по умолчанию для целого числа в Unreal Engine равно 0.

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

Увеличение количества подбираемых материалов

Здесь мы расскажем Unreal Engine, как и когда увеличить переменную счетчика срабатываний. Сначала закройте схему SideScrollerCharacter и откройте схему Pickup.

Помните, что мы создали событие On Component Begin Overlap и приказали подборщику уничтожить себя. Мы можем сделать больше, пока он не разрушился. Перетащите узел из другого булавки Actor и введите «cast» в SideScrollerCharacter. Это должно выглядеть примерно так:

Вы можете отключить узел, используя Alt + щелчок по самому узлу.

Здесь мы сообщаем, что перед началом события перекрытия мы сначала хотим что-то сделать с нашим персонажем, поэтому мы сначала получаем ссылку на нашего персонажа, кастуя его.

Теперь у нас есть доступ к нашему чертежу SideScrollerCharacter внутри чертежа Pickup. Теперь перетащите узел из элемента Как символ бокового прокрутки и введите «установить счетчик захвата».

Здесь мы выполним простое сложение, но сначала нам нужно получить значение нашей переменной pickupCount. Снова перетащите узел из Как символ боковой прокрутки и введите «получить счетчик подбора».

Вы можете перемещать узлы в графе событий или в Blueprint в целом, удерживая правую кнопку мыши и перемещая мышь. Чтобы переместить узел, щелкните левой кнопкой мыши и перетащите. Щелкните правой кнопкой мыши пустое место, введите «int + int» и нажмите Enter.

Подключите ваши узлы, как показано ниже. Все, что мы делаем, это сначала получаем текущее значение переменной pickupCount, добавляем к нему 1, а затем присваиваем новое значение PickupCount. Вот и все! После этого мы снова можем уничтожить актера, заставив пикап исчезнуть после сбора.

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

Отображение счетчика получения

Но мы по-прежнему не видим своего счета. Снова откройте свою схему подбора и перетащите узел из заданного количества подбора и введите «print string».

Теперь перетащите узел из Set: Pickup Count и подключите его к print, как показано ниже. Здесь мы берем значение из PickupCount и печатаем его.

Ваш окончательный чертеж должен выглядеть примерно так:

Нажмите Compile и сохраните. Сыграй в свою игру снова. В окне просмотра теперь вы увидите значение счетчика поднятых предметов.

Я думаю, что сейчас самое подходящее место, чтобы остановиться. Позже в этой серии мы узнаем, как создать HUD (Heads Up Display), где мы можем видеть наши значения pickupCount, состояние здоровья и т. Д. Мы также узнаем, как упаковать игру для Android. Будьте на связи!

Есть предложения? Подключим Twitter, Github, LinkedIn

Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.