Что представляет собой Unreal Engine?
Первая версия движка Unreal Engine появилась в далеком 1998 году, когда ]Epic Games[/anchor] выпустила шутер Unreal. Уже тогда он демонстрировал универсальность, совмещая в себе графический и физический движки, систему искусственного интеллекта, управление файловой и сетевой системами, а также включая готовую среду для разработки игр. Авторы движка упростили взаимодействие с ним, чтобы разработчики могли сосредоточиться на создании основных элементов игр, не отвлекаясь на мелочи вроде отладки сетевого кода или вычисления коллизий.
Развитие Unreal Engine шло постепенно, год за годом: движок менял версии, обрастал новыми технологиями – во многом, кстати, революционными для своего времени. Каждая версия UE привносила новые впечатляющие графические эффекты, показанные Epic Games в сверхтехнологичных демо (вроде «Самаритянина»). Благодаря простоте использования, а также лояльным условиям лицензирования, движок использовали многие студии, от инди-команд до крупнейших компаний, выпускающих дорогие ААА-блокбастеры.
По состоянию на 2020 год Unreal Engine (уже в четвертой номерной версии) остается чрезвычайно востребованным движком, очень гибким, удобным в использовании и абсолютно разноплановым – поставьте рядом предельно мрачную RTS Battlefleet Gothic: Armada и веселую «Королевскую битву» Fortnite, и вы ни за что не догадаетесь, что обе игры выполнены на одном движке. Epic Games продолжает регулярно обновлять его, используя, в том числе, и для своих проектов, включая вышеупомянутую мегапопулярную Fortnite.
unreal engine 5
Пятой итерации движка стоит посвятить отдельный раздел. Epic Games анонсировала Unreal Engine 5 13 мая 2020 года, и это движок, нацеленный на новое поколение консолей – и игр. Собственно, первые проекты на нем появятся не раньше 2021 года, и сверхпопулярная Fortnite также перейдет на новую версию движка.
Чем сможет похвастать Unreal Engine 5? Во-первых, поддержкой всех существующих платформ, от РС и мобильных устройств до консолей PS5 и Xbox Series X. Во-вторых, технологиями Nanite и Lumen: первая позволяет создавать сцены с сотнями миллионов и даже миллиардами полигонов и рендерить их в реальном времени, а вторая обеспечивает разработчиков удобным инструментарием для реализации динамического глобального освещения.
Кроме того, движок будет использовать все преимущества будущих платформ, включая трассировку лучей, работу с SSD, динамическое разрешение и так далее. Однако оценить возможности игр на UE5 можно будет еще не скоро.
Куда двигаться дальше?
Скачать готовый проект можно здесь.
Теперь, когда у нас есть простая игра, можно начать создавать на её основе что-то ещё. Попробуйте добавить счётчик очков, увеличивающийся, когда игрок избегает столкновения со стеной.
Попробуйте также реализовать простые классические игры типа Pong
и
Tetris
. Механика этих игр проста, но может вызывать сложности в реализации.
Если хотите продолжить изучение, прочитайте следующий пост серии, в котором я расскажу, как анимировать персонажей игры с помощью Blueprints.
Чем хорош Unreal Engine?
Как уже говорилось, Unreal Engine очень гибок и универсален. В отличие от Unity, который требует установки множества плагинов (часто – платных), UE4 уже «из коробки» снабжен всеми необходимыми инструментами разработки. Пользователи, знающие С++, освоят движок быстрее, ведь он использует именно этот язык программирования. Впрочем, для тех, кто не знаком с С++, Unreal Engine тоже поддастся без проблем – все благодаря визуальному редактору Blueprints, который позволяет создавать скрипты и размещать объекты, не написав ни единой строчки кода.
К тому же, движок содержит множество инструментов, которые облегчают работу с ним. Например, поддерживает множество форматов текстур, точно передает физические свойства материалов, позволяет изменять объекты в реальном времени, задавать для них функции и комментарии, автоматически выбрать источники освещения, добавить туман и другие эффекты, и так далее. Большую коллекцию ассетов (платных и бесплатных) можно использовать при разработке игр, а открытый исходный код движка дает возможность вносить в него изменения при необходимости. Движок гибко подстраивается под платформу разработки, что позволяет оптимизировать игры под консоли, мобильные гаджеты и ПК.
Epic Games стабильно держит лидерские позиции в области передовых технологий, поэтому Unreal Engine 4 напичкан ими под завязку, обеспечивая, при должном мастерстве игроделов, впечатляющую визуальную составляющую с качественным освещением (трассировка лучей в реальном времени, конечно же, поддерживается), мягкими тенями, честными отражениями, достоверной анимацией персонажей и прочими эффектами. За счет этого, кстати, движок также используется в создании компьютерной графики в киноиндустрии – например, его силами был создан дроид K-2SO для «Изгоя-1» сцены из «В поисках Дори» и «Мандалорца».
Чем плох Unreal Engine?
Казалось бы, у столь богатого возможностями движка не может быть недостатков. Тем не менее найти их можно. Так, например, на Unreal Engine 4 проблематично создавать большие бесшовные миры, рассчитанные на множество игроков, что делает затруднительным разработку MMORPG и прочих ММО-игр на движке.
Аналогичные проблемы возникают с ИИ: если добавить на локацию слишком много ИИ-существ, попытки движка обработать поведение всех одновременно вызовут падение fps, поэтому разработчикам придется придумывать способы ограничения деятельности монстров, находящихся за пределами взаимодействия от игроков.
Удобство использования – не первостепенный, но довольно важный параметр движка. И в этом плане UE4 проигрывает все тому же Unity: если второй рассчитан на игроделов-новичков, то первый разработан для профессионалов, что сказалось на эргономичности интерфейса.
Наконец, Unreal Engine заставляет больше трудиться над оптимизацией игр. Некоторые проекты, в частности, PUBG, страдают от слабой производительности даже на мощных игровых ПК. Это, в первую очередь, «заслуга» программистов шутера, тем не менее многие разработчики говорят о требовательности движка. Мнения на этот счет разнятся, но факт остается фактом – необходимо тщательно работать над играми на UE, чтобы добиться плавности картинки.
Создание туннелей в точке спауна
Нажмите на Compile и переключитесь на BP_TunnelSpawner.
Следующий BP_Tunnel должен спауниться в SpawnPoint самого дальнего
туннеля. Благодаря этому туннель всегда будет продолжаться.
Поскольку самый дальний туннель всегда будет последним созданным, то нам легко получить ссылку на него.
Откройте граф SpawnTunnel. Нажмите правой клавишей мыши на контакте Return Value нода Spawn Actor From Class. Выберите Promote to Variable и переименуйте переменную в NewestTunnel.
Теперь у нас всегда будет ссылка на самый дальний туннель.
Далее создайте новую функцию и назовите её SpawnTunnelAtSpawnPoint. Создайте следующий граф:
Эта схема будет получать самый новый туннель и местоположение его компонента SpawnPoint, после чего спаунить новый туннель в этом местоположении.
Чтобы BP_Tunnel мог обмениваться данными с BP_TunnelSpawner, ему нужна ссылка. Без передачи данных BP_TunnelSpawner не будет знать, где спаунить следующий туннель.
Создание ссылки на спаунер туннелей
Нажмите на Compile и закройте граф SpawnTunnelAtSpawnPoint. Переключитесь на BP_Tunnel.
Добавьте новую переменную и назовите её TunnelSpawner. В качестве Variable Type выберите BP_TunnelSpawner\Object Reference.
Нажмите на Compile и переключитесь на BP_TunnelSpawner.
Откройте граф SpawnTunnel и добавьте обозначенные ноды:
Теперь у каждого туннеля будет ссылка на BP_TunnelSpawner.
Далее нужно сообщить BP_TunnelSpawner о необходимости спауна следующего туннеля, когда игрок входит в TriggerZone.
Скриптинг зоны триггера
Нажмите на Compile и переключитесь на BP_Tunnel.
Перейдите в панель Components и нажмите правой клавишей на TriggerZone. Выберите Add Event\Add OnComponentBeginOverlap. Это добавит в Event Graph следующий нод:
Этот нод будет выполняться когда другой Actor касается TriggerZone.
Сначала нам нужно проверить, является ли Actor, касающийся TriggerZone, игроком.
Перетащите контакт Other Actor. Отпустите левую клавишу мыши в пустом пространстве и выберите в меню Cast to BP_Player.
Примечание: туннель спаунится в
конце
другого туннеля, поэтому он приведёт к срабатыванию триггера TriggerZone этого туннеля. Cast to BP_Player предотвращает выполнение всех дальнейших нодов, если Other Actor является туннелем.
Теперь добавим обозначенные ноды после нода Cast to BP_Player:
Давайте посмотрим, что здесь происходит пошагово:
- Когда Actor касается TriggerZone, выполняется нод On Component Begin Overlap (TriggerZone)
- Нод Cast to BP_Player проверяет, является ли касающийся актор игроком
- Если это игрок, то BP_TunnelSpawner создаст новый туннель. Его местоположение будет находится в компоненте SpawnPoint последнего созданного туннеля.
- Поскольку старый туннель уже не нужен, игра удаляет его с помощью нода DestroyActor
Нажмите на Compile, вернитесь в основной редактор и нажмите Play. Когда вы достигнете конца туннеля, игра создаст новый.
Заголовок спойлера
Хотя игра бесконечно создаёт туннели, они не выглядят
бесконечными. Исправить это можно, сделав видимыми несколько туннелей. Позже, когда мы соединим их с препятствиями, игрок не сможет увидеть, как создаются туннели.
Кому стоит использовать Unreal Engine (в первую очередь)?
Движок идеально подходит для трехмерных ААА-проектов, особенно шутеров и приключенческих экшенов, что подтверждается списком игр, разработанных на Unreal Engine (причем всех версий, а не только четвертой), в котором доминируют представители именно этих жанров. Мы отмечали, что UE создан для профессионалов, и в руках опытной команды этот движок способен показать умопомрачительную картинку.
Еще к нему обязательно следует присмотреться инди студиям. Тут все дело в лицензировании движка: Epic Games распространяет его бесплатно, а если игра получит доход свыше $1 млн, разработчикам придется отчислять компании 5% роялти. Но есть еще пара моментов: во-первых, при размещении игры на площадке Epic Games Store выплачивать отчисления уже не потребуется, и, во-вторых, Epic Games регулярно спонсирует инди-команды, разрабатывающие игры на Unreal Engine 4, посредством грантов и партнерских программ. Конечно, для этого необходимо создать по-настоящему качественный и инновационный проект – но тем лучше для мотивации талантливых студий.
Обратить внимание на альтернативные движки стоит разработчикам ММО-проектов (исходя из о причин), а также создателям игр для мобильных устройств – UE4 лучше себя чувствует на «больших» платформах, а в мобильном сегменте гораздо шире распространены игры на Unity. Тем не менее это не руководство к действию: возможно, вы сможете сделать отличную MMORPG на Unreal Engine, или же запустить шедевральный проект на смартфонах и планшетах – все в ваших руках!
Создание нескольких туннелей
Первое, что нужно сделать — создать функцию, создающую определённое количество туннелей.
Откройте BP_TunnelSpawner и создайте новую функцию с названием SpawnInitialTunnels.
Чтобы спаунить определённое количество туннелей, можно использовать нод ForLoop. Этот нод будет выполнять соединённые с ним ноды указанное количество раз. Добавьте нод ForLoop и соедините его с нодом Entry.
Чтобы нод ForLoop выполнялся
n
раз, необходимо задать для Last Index значение
n – 1
.
В этом туториале мы будем спаунить три туннеля. Для выполнения трёх циклов задайте Last Index значение 2.
Примечание: если не задать поля First Index или Last Index, то по умолчанию они будут равны 0. Когда игра начинается, игрок всегда должен находиться в туннеле. Для этого можно создать первый туннель в местоположении игрока.
Создание первого туннеля
Чтобы определить, был ли создан первый туннель, мы можем проверить, задано ли NewestTunnel. Если нет, то это значит, что первый туннель ещё не создан, потому что NewestTunnel задаётся только после
того, как игра создаст туннель.
Чтобы выполнить эту проверку, добавим нод IsValid (на котором есть знак вопроса) после нода ForLoop.
Затем получим ссылку на NewestTunnel и соединим её с контактом Input Object нода IsValid.
Если NewestTunnel не задан, то будет выполнен нод Is Not Valid, и наоборот.
Добавьте следующее и соедините ноды с контактом Is Not Valid нода IsValid:
Эта схема будет создавать туннель в местоположении Pawn игрока.
Затем нам нужно создать следующие туннели.
Создание следующих туннелей
Добавьте нод SpawnTunnelAtAttachPoint и соедините его с контактом Is Valid нода IsValid. Вот как выглядит готовый граф: Подведём итог:
- Нод ForLoop выполняется три раза
- В первом цикле он спаунит туннель в точке расположения игрока
- В последующих циклах он спаунит туннель в точке SpawnPoint самого нового туннеля
Теперь перейдите в Event Graph и удалите нод SpawnTunnel. Добавьте нод SpawnInitialTunnels после Event BeginPlay. Нажмите на Compile, вернитесь в основной редактор и нажмите на Play. Теперь туннель стал гораздо длиннее!
Заголовок спойлера
Игра пока не очень сложна, так что давайте добавим препятствия.