Познакомьтесь с Dragon Crashers - нашим последним образцом 2D-проекта

Еще в цикле выпуска Unity 2019 года мы реализовали нашу идею - предоставить 2D-художникам и творцам полный набор 2D-инструментов. Релиз наших пакетов 2D Animation включал скелетную анимацию персонажей и инверсную кинематику (IK), дизайн уровней с тайлмапами, сплайнами и инструментами для пиксель-арта. Ознакомьтесь с нашим сайтом 2D, чтобы узнать больше.

С тех пор наша команда 2D оптимизировала эти рабочие процессы и усовершенствовала графическую технологию: 2D Renderer внутри Universal Render Pipeline. Нет лучшего способа испытать эти инструменты и увидеть, как они могут заставить ваши 2D-изображения сиять, чем изучить новый пример проекта. Dragon Crashers уже доступна бесплатно в Asset Store.
Dragon Crashers - это официальный образец проекта, созданный в Unity 2020.2 и демонстрирующий родной набор 2D-инструментов и графических технологий Unity. Геймплей представляет собой вертикальную нарезку популярной сегодня на мобильных платформах ролевой игры с боковой прокруткой Idle RPG.
В то время как партия героев автоматически атакует своих врагов, вы можете вызывать специальные атаки, просто касаясь/нажимая на различные аватары.
Образец проекта был протестирован на настольных, мобильных и веб-платформах.
В дополнение к информации, изложенной в этой статье, присоединяйтесь к нашему онлайн вебинару по обзору Dragon Crashers 14 апреля в 11:00 утра по восточному времени (17:00 по центральноевропейскому времени), чтобы получить ключевые советы и получить живой обзор от нашего глобального разработчика контента, Энди Тача. Проведите меня в раздел регистрации.

Убедитесь, что у вас есть Unity 2020.2 или 2020 LTS, чтобы получить проект в Asset Store. Сначала начните новый 2D-проект, затем перейдите в Package Manager > My Assets, чтобы импортировать Dragon Crashers. Вы увидите несколько всплывающих сообщений о настройках проекта; примите их все.
Если у вас возникнут какие-либо проблемы, сообщите нам об этом на специальном форуме 2D Dragon Crashers.

После импорта проекта в строке меню появится новая опция, предлагающая ярлыки для доступа к сценам проекта. Выберите Load Game Menu и нажмите Play, чтобы попробовать игру.

Мы рекомендуем использовать настройки дисплея высокой четкости при просмотре игры, например, Full HD (1920×1080) или 4K UHD (3840×2160).

Наша партия героев и базовых врагов разнообразна, и они одеты в различные наряды, аксессуары и вариации. Однако все они двуногие и имеют схожее телосложение.
Чтобы не анимировать каждый из них с соответствующими 2D IK-ограничениями, мы создали манекен. Аниматор использовал этот манекен, а художник по персонажам создавал уникальные шкуры и аксессуары для героев.

Префаб "Манекен"(PV_Character_Base_Bipedal.prefab) был использован для создания вариантов префабов для каждого персонажа. Единственное отличие в этих вариантах - ассеты библиотеки Sprite, где мы меняем внешний вид двуногого персонажа.
Все активы библиотеки спрайтов персонажей имеют одинаковые категории и метки для определения частей тела и их вариантов. Например, у врагов-рыцарей и скелетов есть категория "рот", а во время анимации используются варианты спрайтов, обозначенные как "открытый рот", "зубы во рту" и "нормальный рот".
Чтобы применить анимацию ко всем персонажам, убедитесь, что визуальный актив или PSB каждого персонажа имеет аналогичный риг. Другими словами, у них должны быть кости, названные одинаково, прикрепленные к частям тела одной и той же категории и метки. Чтобы сэкономить время, можно скопировать скелет манекена (или кости референсного персонажа) и вставить его в разных персонажей. Эта опция доступна в редакторе скинов, который является частью редактора спрайтов.

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

Нет необходимости закладывать дизайн уровня в камень на ранней стадии процесса, во время создания прототипа. 2D-инструменты для создания мира, входящие в состав Unity, позволят вам весело провести время, создавая уровни, а затем легко их итерировать. Редактор карты плиток и форма спрайта помогают автоматизировать задачи, например, настроить коллайдеры в соответствии с формой объекта или местности, в то время как вид сцены - это ваша игровая площадка, позволяющая сделать игру более интересной и эстетически привлекательной.
Самый важный аспект - подготовить все ваши "кисти" в палитре Tile Palette, которая может содержать повторяющиеся плитки, анимированные плитки, изометрические или шестиугольные плитки, или даже GameObjects, которые рендерят их все с высокой производительностью, используя только один рендерер (Tilemap Renderer). Все элементы сетки см. в палитре Palette_GroundAndWalls Tile Palette.

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

Сетка Tilemap может оказаться не самым практичным решением для добавления в проект более органично выглядящих объектов или элементов на основе сплайнов. Вместо этого мы рекомендуем использовать инструмент, основанный на сплайнах, например 2D Sprite Shape, который рисует так же, как и программы для векторного рисования. Используйте его в качестве фонового реквизита или как часть игрового процесса. SpriteShape Renderer позволяет эффективно отображать множество спрайтов, прикрепленных к линиям или границам фигур. Посмотрите на префаб P_MineCartTracks_A , чтобы увидеть, как рельсы нарисованы с помощью сплайна, а иллюстрация несущей конструкции сделана из текстуры заливки Sprite Shape Profile.

Prefab P_Bridge и P_MineCartTracks_B - другие примеры, демонстрирующие, что граница Sprite Shape не обязательно должна быть простой линией, а скорее представлять собой более сложные элементы - в данном случае мост и железнодорожные пути.

В 2D-рендере используйте шейдер Sprite-Lit для создания расширенных эффектов освещения. Воспользуйтесь всеми преимуществами этих эффектов, придав спрайтам вторичные текстуры.

Карты нормалей можно добавить в редакторе спрайтов. Эти RGB-изображения отражают направление XYZ, в котором находится пиксель, и сигнализируют 2D-осветителям, как сильно на них воздействовать. Карты масок также можно использовать в активе данных 2D Renderer(RenderData_2D.asset в проекте), который является частью функции Light Blend Styles. Стиль наложения света под названием "Френель" используется для подчеркивания ободкового света вокруг персонажей и спрайтов. Например, чтобы получить эффект френеля, выберите использование информации канала R из карт Mask. В данном проекте у нас только один стиль наложения Light, поэтому три канала - R, G и B - выглядят одинаково (черно-белый). Это делает процесс создания карт Mask более удобным.

Shader Graph часто используется в демонстрации для анимации реквизита без нагрузки на центральный процессор. Вы можете наблюдать такие элементы, как ветер, шевелящий паутину( префабP_SpiderWeb_Blur ), светящиеся кристаллы(P_Crystals_Cluster), а также анимацию течения лавы(P_Lava_Flowing_Vertical), которая использует текстуру карты потока для управления направлением UV-координат основной текстуры. Текстура потока использует красный и зеленый цвета для обозначения направления XY, в котором движутся пиксели в каждом кадре. Откройте карту SubGraph FlowMap, чтобы узнать, как добиться этого эффекта.

В той же сцене битвы с драконом используется еще одна техника шейдерной анимации, называемая "анимированным альфа-клиппингом", которая создает плавную анимацию из одной текстуры. Это происходит за счет отображения определенного диапазона пикселей в каждом кадре на основе их альфа-значений. Визуальные эффекты, такие как брызги лавы(ParticleSystem_Splatters) или анимация ударов(P_VFX_HitEffect) , были созданы с помощью этой техники с использованием Shader Graph.

Художественный стиль демо-версии был создан с учетом 2D-освещения - и его многочисленных возможностей. Как видите, спрайты, улучшенные с помощью созданных вручную карт нормалей и масок, получаются относительно плоскими. Некоторые спрайты, например, пол на плиточной карте, имеют серую шкалу; это означает, что они окрашиваются с помощью опции Color из Tilemap Renderer в сочетании с освещенными областями из окружения.

2D-освещение в реальном времени позволит вам уделить больше времени финальной игровой сцене в редакторе Unity. Наблюдение за непосредственными результатами при создании сцены с освещением и объектами или даже возможность играть в уровень по ходу дела позволяет лучше создать нужное настроение и атмосферу в игре.
Кроме того, вы можете усилить погружение, анимировав эти элементы. Например, префаб P_Lantern_HangingFromPost показывает, как прикрепить свет к анимированному объекту, или дать персонажу-ведьме посох с частицами Sprite-Lit.
Еще одно преимущество использования 2D-светильников в проекте - возможность повторного использования элементов. Окружение и реквизит могут выглядеть совершенно по-разному в зависимости от освещения, что позволяет воссоздать множество различных уровней с помощью одних и тех же спрайтов.
Для создания, структурирования, управления и итерации игрового процесса в нашем демо-проекте использовалась комбинация Scriptable Objects и Prefabs.
Все семь персонажей, независимо от того, герои они или злодеи, наследуют свою основную структуру от базового Unit Prefab и используют один и тот же код поведения. Чтобы разграничить значения между персонажами, мы использовали объекты Scriptable Objects для различных "блоков" значений, основанных на единицах измерения. Жестко закодированные значения затрудняют балансировку игры для непрограммистов и делают геймплей негибким, поэтому мы установили такие значения единиц, как "Величина урона атаки", "Время затухания способности в секундах" и "Здоровье юнита" в скриптовых объектах, чтобы каждый, кто работает над проектом, мог быстро внести коррективы. Эти изменения значений затем динамически обрабатываются игровым кодом.

Каждый префаб имеет основной скрипт 'UnitController', который действует как "мозг" юнита и обрабатывает внутренние ссылки на скрипты префаба и последовательность поведения. Например, когда дракон подвергается нападению, "UnitController" выполняет связанные с ним события поведения, такие как переход к анимации вздрагивания, воспроизведение звукового эффекта рева и уменьшение количества здоровья дракона. Эти основные типы поведения придерживаются концепции инкапсуляции и выполняют только свои собственные цели и задачи. Например, UnitHealthBehaviour обрабатывает только логику, включая установку и удаление значений здоровья юнита, и сообщает о важных обратных вызовах событий, таких как 'HealthChanged' или 'HealthIsZero'. Однако 'UnitController' отправляет значения в 'UnitHealthBehaviour', основываясь на сценариях и действиях, происходящих во время игрового процесса.

В некоторых случаях внешние по отношению к Units системы требуют обновления при наступлении определенного события. Для этих целей используются делегаты.
Например: Когда ведьма получает урон от атаки, и 'UnitHealthBehaviour' выполняет событие 'HealthChanged(int healthAmount)', то подписанный извне 'UIUnitHealthBehaviour' может обновить шкалу здоровья ведьмы в соответствии с этим значением.
Использование делегатов позволяет нам изолировать и тестировать области, не зависящие от других систем. Например, это включало в себя тестирование работы всплывающей системы отображения номеров повреждений в отдельной сцене, без необходимости симулировать игровой процесс битвы.

Функция Timeline в Unity использовалась в двух областях: Линейные сюжетные сцены и последовательности способностей каждого юнита.
Линейные сцены происходят в начале и в конце боя. Они обеспечивают последовательность действий для различных областей, таких как переходы камеры (с помощью Cinemachine), анимация персонажей (с помощью Animator), аудиоклипы, эффекты частиц и анимация пользовательского интерфейса. Каждый трек был привязан к соответствующему экземпляру сцены.
Сигнал Timeline был встроен в конец вступительного ролика, чтобы вызвать событие Unity по завершении сцены. Это "сигнализирует" о том, когда следует начать логику игрового процесса битвы.
Timeline использовался для создания готовых последовательностей способностей для каждого блока. Это позволяет каждому юниту иметь свои особые способности, которые связаны с его персонажем, подобно способностям чемпиона в MOBA.
Каждый юнит содержит две временные шкалы способностей: одну "базовую" автоатаку и одну "специальную" атаку, активируемую вручную. Скрипт 'UnitAbilitiesBehaviour' обрабатывает логику для обеих Timeline способностей с точки зрения текущей способности, очереди способностей и запуска/остановки их свертывания (в зависимости от высокоуровневой логики геймплея, например, если играет вступительная сцена или если юнит умер). Способности Timeline Tracks привязаны к локальным системам Unit Prefab, включая Character's Animator для анимации атаки и Particle Systems для VFX. Это позволило программисту и художнику создавать, воспроизводить и дорабатывать конкретную способность юнита в отдельности, используя режим редактирования префаба, прежде чем применять изменения к каждому экземпляру префаба юнита в игре.

Timeline Signals использовались, когда способность должна была применить модификатор значения к здоровью цели. Например, когда рыцарь взмахивает мечом, мы хотим, чтобы урон наносился, как только меч достигнет критической точки в анимации, а не в начале или в конце взмаха меча. По мере изменения времени анимации и VFX в процессе разработки художник переставлял сигнал "Ability Happened" в новую нужную точку последовательности в очень быстром рабочем процессе, не прибегая к изменению значений в коде программистом.
Это также позволило нам добавить несколько сигналов "Ability Happened" в непрерывную атаку, например, когда дракон дышит огнем на группу героев.

Старший глобальный разработчик контента Энди Тач провел вебинар с демонстрацией в редакторе рабочего процесса Character Pipeline Workflow, который использовался для создания проекта. На этом вебинаре вы узнаете, как:
- Экспорт 2D-персонажа из Photoshop в Unity
- Настройка спрайта персонажа
- Настройка IK для конечностей персонажа
- Используйте замену спрайтов для создания различных визуальных образов персонажей
- Используйте вложенные префабы для вложений в оружие
- Применение карт нормалей и масок для 2D стилей освещения
- Последовательность способностей персонажей с помощью Timeline
В знак благодарности за то, что вы вместе с нами изучили Dragon Crashers, мы хотели бы поделиться с вами набором обоев, фонов для Zoom и других визуальных элементов, которые будут вдохновлять вас на протяжении всего вашего пути разработчика 2D-игр. Получить фоны Dragon Crasher можно здесь.

Для тех, кто начинает новый 2D-проект, на блоге и форумах уже есть несколько отличных руководств. Если вы только начинаете работать с инструментами, рекомендуем ознакомиться с веб-страницей 2D, блогом 2D Tips Lightning Round и презентацией для получения полезных советов. Чтобы узнать еще больше, ознакомьтесь с нашей системой скелетной анимации здесь, а также с нашим предыдущим проектом - Затерянный склеп и соответствующий вебинар. Как всегда, мы также рекомендуем ознакомиться с нашими последними документами и, конечно же, с разделом 2D Renderer для получения дополнительной информации о конкретных функциях или API.