Unreal engine 2d игры. Полная раскадровка Alucard"а

To the best of my knowledge, the answer is that there are none. Moreover, there are not likely to be a lot, if any, made in the future. Here’s why.

Out of all the engines anyone can reasonably get, (thus leaving aside studios’ own, not-for-sale engines like EA’s Frostbite and Konami’s FOX Engine), Unreal Engine 4 is rightfully considered to be the most powerful and impressive one, one that theorically gives AAA-level capabilities to even one-man studios.

In practice, of course, it’s pointless to have such a powerful engine if you do not have the effects and models for it to render. If you root through Steam’s backlog, or watch Jim Sterling’s channel on YouTube, you’ll soon see truly sad cases where 1–2 people grabbed that engine stunned with its capabilities, only to suddenly realise nothing they can draw and model on their own can come close to the default models in the starter pack (simply because those had dozens of man-hours put into each and every one of them), and so they just make a shell of a 3D game out of nothing but the bits already included and freely available by other modellers, with predictably terrible results.

What does this have to do with 2D games? It’s simple; there’s basically nothing an Unreal Engine 4 can do for a 2D game other, cheaper and more available engines cannot do. If, in theory, you have some ultra-painterly game that far exceeds other 2D beauties like Shadowrun Trilogy or The Banner Saga … chances are, Unity (which is free) can still handle it. Hyper Light Drifter is a recent (March 2016) 2D game that received near-universal praise for its graphics, yet it was made on the far, far simpler GameMaker.

Still, that extra power cannot POSSIBLY lead to any harm, right? If you can make a pixel-art game on Unreal 4, and not on GameMaker, what’s the problem? If you’re thinking that, I have two words for you.

System requirements.

The higher they are, the fewer people can play your game on PC, which remains a far more important market for 2D games than any of the consoles. (And the reverse does not hold true: the very same, GameMaker-made Hyper Light Drifter has been easily ported to both PS4 and Xbox One.) Making a game on UE4 cuts out a huge proportion of PC owners out of your potential paying audience from the get-go. Conversely, these are also the very people most likely to play 2D games in the first place, as opposed to upgrade hounds who mainly care about being able to play the latest AAA like last year’s Witcher III or the upcoming Battlefield 1. All in all, it makes practically no sense for a 2D game developer to use Unreal 4.

What I am trying to achieve with this small game (prototype):

  • Develop a playable 2D Platformer game as a Minimum Viable Product (Extra Credits Video)
  • Learn key mechanics and break down features to the smallest function
  • Get into Blueprint scripting as a visual C++ representation
  • Build components which can be used in future projects

Part 1: Project Start, Tileset and Tilemap Setup

If you don’t have Unreal Engine 4.8+ installed yet, get it ! This release gives us a lot of new features and improvements inside the Paper2D plugin. Most important: Tileset and Tilemap Editor with Collisions. Start a new blank project with no starter content.

  • create a base folder first for everything related to your project, not only the UE4 project data
  • set up a version control system for the UE4 folder (Git, SVN, Perforce)
  • create some sort of ToDo List to capture your ideas and resources (I use Trello)

Get some Game Art to start with

If you are a developer like me and not an artist, Open Game Art is a good resource to get some nice content to start with. Just have a look at some of these for your own game idea. Remember to follow the licence under wich the authors released their stuff. For me the castle tileset is a good placeholder and might even be used to finish the game. It’s more of a prototype anyway? :)

If you like to know more about creating your own tileset, have a look at this (long) tutorial from Orianart .

Import the 2D Platformer Tileset(s)

So let’s get started:

  • import the tileset as a normal texture (drag into or open file dialog)
  • right-click on the texture and under Sprite Actions “Apply Paper2D Texture Settings”
  • then build it with the Sprite Action “Create Tile Set”

Inside the Tileset Editor you define the tile-size and collisions for this texture. You need to know the size of each tile (e.g. 16x16px, 32x32px etc.).

Select each tile which should get a collision border. In most cases you can use the boxed collider and fill the whole tile. But you can also create individual colliders with the polygon tool. Snap to pixel is helpful, as the editor has a much higher resolution than your pixel art.

Create all assets for your backgrounds and platforms this way, as we are going to use the tilemap editor in the next step to build our level.

Tilemap – The first test level

With a configured Tileset we can start blocking out our first level *exited*. Create a new Tilemap and start “painting” whatever you like. If you have no ideas yet, don’t worry. Just place some platforms, pits and other placeholders, so a character can run around later on.

On the left side you choose the tileset you wish to use. On the right side (not shown on this picture) you set up the important parameters for these tiles. As material I just use the unlit masked sprite material from the Paper2D Plugin content, as we are not using a light-setup (yet) and a Pixel per Unit value of 0.32.

On the top-right you have the layer-setup. Use these layers to position your tiles and build background, middle- and foreground (platform) elements. If you paint the background, you can deactivate collisions for this layer completely.

For more infos how to use the Tilemap Editor, watch the following video by DokipenTechTutorials . It helped me a lot to get a quick intro. But keep in mind that is was created for the experimental features of the UE4.7 version, which didn’t include collisions yet.

Продолжая сравнение топовых 3D-движков — Unreal Engine 4 и Unity, на этот раз мы рассмотрим их достоинства и недостатки при разработке 2D-проектов. Мы выясним, чем хорош Unreal для 2D, как организована работа с основными элементами двухмерной игры и какими средствами можно реализовать 2D-персонажей со скелетной анимацией.

Мы Unity 5 и UE4 применительно к 3D-играм. Если кратко, мы пришли к выводу, что Unreal крут и его вполне можно использовать для разработки качественных трёхмерных игр. Но какая ситуация складывается в мире 2D-игр? Сравним Unity 5 и Unreal Engine 4.16.


Unreal Engine 4 vs Hollow Knight (Unity)

Если популярность Unreal для 3D не вызывает сомнений, то, например, коммерческих 2D-проектов, сделанных на нём, практически нет. Поэтому возникает вопрос: стоит ли вообще использовать Unreal для 2D и не слишком ли он избыточен для подобных проектов?

Рассмотрим этот вопрос на примере игры Hollow Knight (на заднем плане скриншота). Она сделана на движке Unity, PC-версия занимает 8,5 Гб, весьма мощный проект. Если делать подобную игру на Unreal, runtime-библиотеки займут в сборке проекта около 100—200 Мб. Для масштабных проектов это не так страшно, ведь даже мобильные игры порой весят пару гигабайт.

Чем же нам может помочь Unreal при создании 2D-игры?

Преимущество Unreal’а в том, что он позволяет сделать игру на Blueprint’ах. Блупринт — это система средств визуального программирования, с которой вы можете создать игру целиком на визуальных схемах — без глубоких знаний какого-либо языка программирования.

Часто не только программисты, но и дизайнеры уровней, аниматоры, геймдизайнеры используют блупринты. Они встроены во все подсистемы движка, и их можно расширять C++ кодом.


Реализация управления игровым объектом через блупринт

Как вариант, если вы только начинаете создавать игры, попробуйте сделать первую игру именно в 2D, потому что она по определению проще 3D-игры. Для 2D потребуется меньше компонентов, сама игровая механика «плоская». Конечно, в таком проекте вы всё равно можете использовать 3D-модели в качестве фона, если понадобится. Начинающему разработчику проще разобраться в системе блупринтов, чем изучать язык C# для Unity или С++ для UE4.

Если вы уже пробовали Unreal, возможно, вам знакома система Unreal Gameplay Framework — это целый набор сущностей движка, от средств управления персонажем (player controller) до HUD’а, игрового интерфейса и анимации. Несмотря на то что набор 2D-компонентов немного отличается от тех, что используется для 3D, общие принципы работы в них несомненно присутствуют.

Также в Unreal есть прекрасный мультиплеер. Это встроенная в движок реализация высокоуровневого клиент-серверного взаимодействия, с помощью которой вы пишете сразу и клиентский код, и серверный. К слову, эта задача также решается средствами блупринтов. При этом вы можете собрать на движке выделенный сервер (dedicated server). В движке Unity подобной возможности нет. Кроме того, в редакторе удобно тестировать многопользовательские игры, запуская нужное количество экземпляров игры. Такой режим запуска не сильно отличается от обычного и не требует дополнительных затрат времени.

2D в Unity


Что нам даёт Unity для 2D-игр? Для начала — компонент Sprite Renderer, на котором основана игровая 2D-графика. Мы можем переносить спрайты из папки контента в сцену в редакторе, строить на основе них элементы уровня и игровые объекты. Сразу отметим, что в Unreal схожая механика редактирования сцен. Мы можем перетаскивать компонент спрайта в сцену, обычный drag-and-drop. Для реализации спрайтовой (покадровой) анимации Unity предлагает два способа:

  • Путём замены спрайтов в Animation Controller (используются те же средства анимации, что и для 3D-объектов), в итоге получается несколько спрайтов и один графический объект, а анимация меняет текстуру этому спрайту.
  • Путём создания атласа из текстур. Можно сделать анимацию через скрипт UV-анимации. Благодаря смещению UV-координат получается движущаяся картинка. При этом один или несколько клипов анимации расположены в одной текстуре.

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

2D в Unreal


В Unreal Engine 4 создание проекта или прототипа часто начинается с выбора шаблона, поэтому рассмотрим этот шаг. Чтобы разработчикам было с чего начать, существует шаблон проекта 2D Side Scroller. Это аналог 3D шаблона Side Scroller, но графика в нём основана на стандартном плагине Paper2D. Он даёт нам поддержку 2D-спрайтов, т. е. тех самых основных графических элементов, из которых собирается игра.

Кроме спрайтов, есть анимационные клипы, они называются flipbook. Похоже на блокнот, когда мы рисуем по одному кадру на каждой странице, а потом быстро перелистываем, чтобы получилась движущаяся картинка. Флипбуки — средство простейшей двухмерной анимации. Их, как и спрайты, можно импортировать из программы Texture Packer, она позволяет настроить параметры компоновки текстурного атласа. Загрузив атлас в Unreal, мы получим каждый спрайт в виде отдельного ассета (Asset), который потом просто перетаскивается на сцену.

Здесь мы видим скриншот редактора с проектом 2D Side Scroller. В нем реализовано управление персонажем, взаимодействие персонажа с миром (физика) и переключение анимации. Несмотря на 2D графику, физика в проекте трёхмерная. Это связано с тем, что экспериментальная 2D-физика, реализованная на Box2D, есть только на платформе Windows. Из-за этого 2D-спрайты крепятся к трёхмерному физическому представлению. Подход немного странный, поэтому для персонажа PaperCharacter существует специальный флаг, который ограничивает его перемещение в заданной плоскости.

В движке Unity, в отличие от Unreal, элементы для 2D-физики полностью поддерживаются: есть коллайдеры, Rigid Body (твёрдые тела) и другие компоненты.

Создание 2D-уровней в Unreal

Обычно создание уровней реализуется переносом спрайтов на игровую сцену в редакторе. Но кроме этого, в Unreal есть интересный инструмент для редактирования уровней путём создания тайлов (Tile) и тайловых карт (TileMap).

Перед началом создания уровня мы заранее создаём набор элементов фиксированного размера (тайлов) и потом строим из них уровень, причём Unreal даёт нам необходимые средства редактирования тайлов и карт. Тайлы сочетают в себе как графическую часть, так и коллайдеры. Получившийся тайловый уровень автоматически оптимизирован в плане и физического представления, и рендеринга (оптимизация drawcall’ов).

Также Unreal позволяет связывать элементы уровня блупринтами. Можно безо всяких специальных инструментов реализовывать такие скрипты, как «При открытии этой двери появляется монстр» или «Если бочка взорвётся, то произойдёт какое-то событие».


Фрагмент «блупринта уровня» в UE4 с реализацией реакции на вхождение игрока в зону триггера

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

2D-персонажи в Unreal

Плагин Paper2D в Unreal предоставляет нам компонент PaperCharacter. Это персонаж, основанный на Flipbook, т. е. на системе спрайтовой покадровой анимации. У нас будет сам персонаж и его физическая модель в виде 3D-капсулы.

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


Old-school physics enabled!

А что насчёт персонажей со скелетом? Как в Unreal, так и в Unity 5 нет встроенного компонента для двумерной скелетной анимации, но мы этот вопрос рассмотрим дальше.

Spine для двухмерной скелетной анимации

Программа Spine — это комплексный пакет и SDK для создания двумерных персонажей. С помощью неё создаётся скелет персонажа, к нему крепятся спрайты, причем они необязательно прямоугольные: можно придать им нужную форму. Анимация получается скелетной, полностью аналогичной той, что используется для 3D-персонажей. В отличие от спрайтовой, она будет плавной за счёт того, что между ключевыми кадрами анимации выполняется интерполяция движения костей. Файлы анимации при этом весят меньше, плюс Spine позволяет привязывать к персонажам объекты.


Главное окно программы Spine с отображением костей персонажа

Таким образом, в Spine можно целиком создать персонажа, включая все его анимации и настройки привязки объектов. Кроме самой анимации, Spine даёт возможность крепить к любому моменту анимации события, например звуки шагов. Можно прямо в редакторе настроить их, посмотреть, как персонаж и его события сочетаются с анимацией, и экспортировать в подходящий для движка формат. При экспорте из программы мы получаем файл атласа с картинками — частями персонажа и JSON с анимацией и дополнительными настройками. У персонажа может быть несколько скинов, при этом скин может иметь дополнительные спрайты, привязанные к костям.

Также заявлено, что Spine поддерживает деформацию мешей. При перемещении костей спрайты могут тянуться костями. Это есть не во всех подобных пакетах, но возможность примечательная, так как может быть полезна для создания определённых персонажей. Также эта система позволяет блендить (смешивать) анимации между собой и управлять ими программно. Иными словами, создав одну анимацию бега, например, мы можем плавно перейти в анимацию ходьбы, и наоборот.

Из-за такого специфичного набора возможностей и многообразия поддерживаемых платформ сама система Spine часто идёт в отрыве от основной системы анимации в движке. Если в Unity, например, можно создать иерархию костей, которая изначально была в персонаже (это одной кнопкой делается), то в плагине для Unreal такого пока нет. Там можно создать специальные компоненты для привязки экторов к костям. Мы задаём, например, название кости, и объект к ней привязывается.

Spine для Unreal Engine 4

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

Также есть удобная привязка событий, вы можете привязать специальное событие к любому моменту анимации. События именованные, как и сами анимации, в Unreal можно легко привязать делегат события по названию и тут же реализовать реакцию игры на него.

Основной недостаток Spine в том, что система анимации на самом деле не связана с анриаловской. Всё, что нам дает Unreal (управление анимацией через Animation Blueprint, различные схемы блендинга, редакторы анимации и их последовательностей), — всё это мы не можем использовать для Spine и 2D-анимации. Придётся управлять анимацией и её переключением вручную, в функции Tick, и скорее всего, для этого понадобятся дополнительные таймеры и состояния. Чем-то такой подход напоминает старую систему анимации в Unity 4, в которой приходилось пользоваться функциями Play, Blend и CrossFade в компоненте Animation.

Тем не менее плагин хорош тем, что позволяет вам использовать 2D-скелетную анимацию, которой нет в Unreal. С его помощью можно создать 2D-персонажей с динамичной и плавной анимацией, сэкономить память и труд художников, привязав объекты (например, оружие) к костям персонажа вместо создания дополнительного набора анимации для каждого оружия.

Оптимизация 2D в Unreal Engine 4

Типичный способ оптимизации — упаковка спрайтов уровня в атласы. Это избавляет нас от переключения текстур. В Unreal Engine, если вы перетащите на сцену даже несколько одинаковых спрайтов, получится столько же drawcall’ов. Встроенная автоматическая оптимизация рендеринга для 2D отсутствует, поэтому имеет смысл выделять некоторые части уровней, группировать с помощью инструмента MergeSprites. Команда Merge Sprites аналогична Merge Actors для 3D-объектов, она объединяет несколько объектов в один. Merge Sprites также объединяет коллизии объектов.


Редактирование геометрии спрайта

Также в движке есть инструмент редактирования геометрии спрайтов. Как показано на картинке, он позволяет вместо стандартной прямоугольной формы спрайта задать свою. Например, вырезав прозрачность, можно уменьшить overdraw и тем самым увеличить производительность.

Как и в трёхмерной графике, в 2D актуальна оптимизация через material instance. Можно по привычке, как в Unity, копировать материалы, но в Unreal так делать не стоит. Лучше делать один или несколько базовых материалов, которые фактически описывают шейдер рендеринга, а на его основе сделать инстансы материала с набором изменяемых параметров (цветов, текстур и констант). За счёт этой оптимизации движку не нужно будет создавать большой набор скомпилированных версий шейдеров, что сэкономит размер проекта после сборки, освободит некоторые количество оперативной и видеопамяти, повысит производительность.

2D-ассеты (Marketplace)

Ускорить разработку прототипа игры зачастую позволяют ассеты, которые можно приобрести в магазине. По аналогии с Unity Asset Store у Epic Games есть Marketplace для UE4. 2D-ассетов в нём мало, но они есть. В основном это наборы арта: уровни и персонажи. Иногда встречаются шаблоны целых проектов типа платформеров, раннеров и т. п. Их можно использовать как основу проекта или для создания прототипов. Но, к сожалению, нет специальных инструментов для 2D-проектов, а также эффектов, ориентированных на 2D. В этом плане в Unity Asset Store всё гораздо лучше: больше возможностей, даже систем для 2D-анимации штук пять: Puppet2D, Anima2D и т. д.

Примечательные фичи UnrealEngine 4 в 2D

Мне удалось найти в анриале и несколько примечательных фич. Например, в спрайтовой анимации Paper2D flipbook можно для каждого кадра задать свой физический коллайдер. То есть вы сможете одним таким ассетом сделать необычный объект, например магические ворота, которые открываются и закрываются анимацией. Наверно, менять в каждом кадре collision не очень оптимально, но тем не менее такая возможность есть.

На скриншоте трёхмерного персонажа окружают спрайты, отбрасывающие реалистичные тени. На самом деле они двумерные, и можно, не создавая специальных инструментов и костылей, включить от спрайтов 2D-тени и даже реакцию на освещение. Это делается заменой материала, используемого для спрайта. Для этого есть материалы Sprite Lit и Sprite Lit Shadows. Это может пригодиться, если ваша 2D-игра содержит в себе 3D-окружение, т. е. уровни трёхмерные, а сами персонажи при этом плоские. Например, в игре Ori And The Blind Forest есть такие элементы.

Также можно в настройках проекта включить специальную сортировку спрайтов. Если у вас обычный 2D-проект с видом сбоку, то вам, вероятно, не очень важно, как производится сортировка. Какие-то спрайты вы можете просто отодвинуть на задний план. Но если у вас изометрическая игра и нужен порядок расположения динамических объектов, то, возможно, имеет смысл выставить ось сортировки в виде оси вверх, и тогда они автоматически сами будут сортироваться.

Я встречал Unity-проект, в котором подобная сортировка была сделана в скрипте для каждого объекта. В Unity есть параметр для сортировки спрайтов — sorting layer offset, и каждый скрипт каждый кадр рассчитывал величину смещения на основе текущих координат объекта. Конечно, такой способ не может не повлиять на производительность. Ось сортировки спрайтов решает подобную задачу одним кликом.

Производительность UE 4 на мобильных устройствах

Есть миф, что на UE4 плохая производительность. Но на самом деле на нём вполне можно создавать эпичные по своей красоте проекты, даже в 3D. Впрочем, как и во всех движках, производительность и оптимизация связаны между собой. Просто надо учитывать это при разработке и своевременно заниматься профайлингом и оптимизацией. Что касается 2D, некоторые моменты я уже перечислил. Кроме того, возможно, вы захотите некоторые 2D-спрайты рисовать через canvas. Многое зависит от контекста и проекта в целом.

UE4 vs Unity 5: 2D

Подведём итог. Стоит ли вообще использовать Unreal и какие фичи критичны для разработки 2D-проектов, а какие нет? Я составил список в порядке важности фич.

Рассмотрим каждый пункт немного подробнее.

2D-физика. С моей точки зрения, основная проблема заключается в том, что в Unreal сейчас нет двумерной физики для большинства платформ, существует лишь экспериментальная реализации для Windows. Пока на большинстве платформ нет 2D-физики, это будет причинять боль и физику придётся делать через 3D-компоненты и искусственные ограничения.

Батчинг 2D-спрайтов. В Unity не пишется количество drawcall’ов для 2D-спрайтов, если мы добавим в сцену много 2D-спрайтов, это не будет отображено в окне статистики, но производительность говорит сама за себя — движок их всё-таки объединяет в группы при рендеринге. А в Unreal придётся использовать инструмент Merge Sprites или, возможно, ждать, когда появится более хорошее решение, чем существующая система Paper2D.

Эффекты спрайтов. В Unity можно найти различные ассеты для эффектов на спрайтах, в Unreal Engine этого пока нет.

2D-инструменты в Store. Для Unity есть различные инструменты в Store, т. е. и плагины, и расширения, и эффекты. В Unreal Marketplace, к сожалению, только 2D-проекты и их шаблоны, инструментарий почти отсутствует.

Дальше идут фичи, которые понадобятся не всякому проекту, например тени от спрайтов. Преимуществом Unreal можно считать визуальный скриптинг, в том числе блупринт логики уровня — Level Blueprint. Тайловый редактор уровней пригодится, если вы захотите сделать в Unreal олдскульную игру с «пиксельной» графикой. Почему бы и нет? И анимация модели коллизий — тоже интересная экспериментальная фича.

Заключение

Если подвести итог: в Unreal есть самые базовые инструменты для 2D, несмотря на наличие некоторых интересных фич. Если вы захотите использовать скелетную анимацию, вам придётся дополнительно изучать сторонние инструменты. Увы, пока нет удобства, аналогичного тому, которое Unreal предлагает в 3D. Основная проблема Unreal — отсутствие встроенной 2D-физики на всех платформах, кроме Windows.

Скорее всего, для большинства 2D-проектов разумнее взять какой-нибудь другой движок вместо Unreal. Но это всегда зависит от самого проекта, от ваших желаний, целей, потребностей.

This tutorial series covers all aspects of creating a 2D game using Unreal Engine. It is my intention to eventually create an identical series covering Unity, so people can directly compare the workflow of both game engines. This series is in both text and video form. All coding is done using Blueprints although I may do a follow up tutorial covering the same material using C++.

Unreal Engine Text Tutorial Series

Unreal Engine Video Tutorial Series

    • This video gives an overview of the two engines, their licenses, strengths, features, etc. We also cover exactly what the tutorial series will cover.
    • In this video tutorial we start by taking a look at Unreal Engine, the editor in general and how the various bits and pieces work. We then create our very first, very simple, game completely from scratch, implementing the classic Hello World application using a blueprint to control the camera.
    • In this second part of our Unreal Engine tutorial series, we take a closer look at importing, creating and using sprites. We then follow it up by importing a spritesheet and creating a flipbook animation. In the video we also take a bit of a brief detour into Blender and TexturePacker, to render and create our spritesheet.
    • In our ongoing Unity vs Unreal Tutorial Series, today we look at a tying everything we learned together to start making a gain. We are going to look at the difference between Actors, Pawns and Characters, then go ahead and create a Player class that controllers or players sprite.
    • Unreal Engine Part Four - Creating 2D maps using TileSets and TileMaps

    • In this tutorial we look at the process of creating 2D maps. We create a TileSet from an existing sprite sheet, define it"s collision settings, then make a multi layered tile map from the results.
    • Unreal Engine Part Five - Creating a UI using Unreal Motion Graphics (UMG) Framework

    • In this tutorial we look at using UMG to create a simple widget based 2D UI for your game, as well as the code required to display it on screen.
    • Unreal Engine Part Six - Playing Audio

    • In this tutorial we look at playing audio in Unreal Engine. Specifically PlaySound2D, Play Sound at Location and playing sound as a component. Also cover importing wav and creating Audio Cues.

Не так давно компания Epic Games сделала невероятно щедрый подарок всем желающим - движок UE4 с исходным кодом всего за $20/мес, считай даром! Воспользуемся их щедростью и великодушием и попробуем создать что-нибудь не очень сложное, но, по крайней мере, более-менее играбельное - 2D платформер.

Прежде всего нам понадобятся:

  • спрайты персонажа
  • текстуры платформ
Поскольку лично я рисовать не умею вовсе, да и не в этом наша цель, воспользуемся ресурсами замечательной игры “Castlevania: Symphony of the night”, в которой главным героем является Алукард, сын Дракулы. Несложно найти на просторах сети полную раскадровку персонажа - то что нам нужно!

Полная раскадровка Alucard"а

Давайте подготовим раскадровки для 2х состояний: покой и бег, для этого необходимо удалить красный фон (нам ведь не надо, что бы персонаж перемещался всегда на фоне красного прямоугольника) и вырезать требующиеся части изображения, на выходе получая что-то вроде этого:

Из фоновых изображений пока вырезаем только пол:

Длинная и скучная текстура пола


С подготовкой все, теперь приступаем к созданию проекта и импорту исходников. В последних версиях UE4 была добавлена возможность сразу создать 2D Side Sroller (blueprint), воспользуемся ей, не забыв убрать стартовый контент - там достаточно много материалов и объектов, которые нам сейчас не нужны. По умолчанию нам дают уже готового к пробежке манекена и пару платформ, все это нам не потребуется, так что удаляем.

Базовый контент


Структурируем папки проекта и импортируем соответствующие изображения:

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

Первым делом создаем еще пару папочек, на этот раз в “Sprites” → “Alucard”, внутри которой будут папки “Idle” и “Walking” с соответствующими спрайтами. Итак, создаем пустой спрайт, называем его “Idle_1” и открываем. Сразу же переходим в “Edit source region”, а в качестве текстуры-источника указываем текстуру «Alucard_Idle».

Один спрайт должен содержать один кадр анимации персонажа, так что скорректируем значения “Source UV” и “Source dimension”, что бы получить один кадр, либо просто дважды кликаем на нужно изображение, что бы автоматически определить его границы:

Проделываем то же самое с оставшимися кадрами покоя и ходьбы:

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

Самое время придать немного жизни нашим спрайтам! Для этого создаем “Animation flipbook”, даем ему имя и открываем. Добавляем соответствующие кадры по порядку и выставляем количество кадров в секунду по вкусу, мне нравится 6:

Повторяем для ходьбы и на выходе имеем 2 flipbook"а:

Теперь добавим на сцену нашу платформу, важно что в ее положении по компонента Y была равна 0. Далее добавим управление (в заготовке оно уже включено, но переназначим, как нам будет удобно): Edit → Project Setting → Input.

Переходим непосредственно к созданию персонажа. В папке “Blueprints” создаем новый BP, нас спросят, какой класс принта, выбираем “Character”, даем имя, открываем и направляемся в раздел “Components”. Добавляет к капсуле Flipbook, в качестве источника выбираем заготовленную Idle анимацию, так же добавляем SpringArm и к ней цепляем камеру, в принципе можно обойтись и без руки, но лучше с ней. Настраиваем размеры спрайтов и капсулы по вкусу, но капсулу лучше делать немного поменьше, что бы спрайт не парил над землей. У камеры убираем зависимость от контроллера и выставляем ортографический тип, глубину - по вкусу.

Компилируем, сохраняем. В настройках мира можно создать свой GameMode, либо поменять в уже существующем “Default Pawn Class” на только что созданного нами персонажа.

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

Пора научить его передвигаться, для этого вновь открываем BP персонажа и переходим в раздел графа. Стоит отметить, что Blueprints – очень мощный инструмент, с его помощью можно обойтись в проекте без классического написания кода, но на деле это то же самое программирование, просто, собственно, писать надо будет разве что несколько имен, да значений. Итак, прежде всего надо добавить движение по вектору при событии MoveRight:

Тут происходит следующее: при воздействии на ось (у нас может быть два воздействия ± 1) происходит передвижение объекта по оси X на заданное воздействие. В принципе этого достаточно для передвижения, можно пробовать - компилируем, сохраняем, тестируем. Персонаж смещается вдоль оси, но без анимации, ведь мы не предусмотрели ее переключение.

Для переключения между анимациями нам необходимо заменить, собственно анимацию в flipbook нашего персонажа. Сделать это можно несколькими способами, но я предпочитаю наиболее универсальный и, как мне кажется, изящный. Создадим на графе Свое событие, назовем соответственно цели – “Update animation”.

Логика работы тут следующая: при вызове события во flipbook цели помещается заданная анимация. Сама анимация выбирается в зависимости от того, какая скорость у нашего объекта, если больше нуля - анимация ходьбы, иначе - покоя. Обновим и граф движения:

Появилось новое событие - “Event Tick”, оно происходит каждый кадр, соответственно каждый кадр у нас теперь происходит проверка необходимости смены анимации. Если сейчас запустить игру, то персонаж будет двигаться с анимацией бега, но всегда будет смотреть в одну сторону, исправим это:

Итоговый результат:

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

UPD 1. По совету пользователя

Статьи по теме: