Games

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

EDUARDO ORIZ / UNITY TECHNOLOGIESSenior Content Marketing Manager
Mar 19, 2021|10 Мин
Познакомьтесь с Dragon Crashers - нашим последним образцом 2D-проекта
Эта веб-страница была переведена с помощью машинного перевода для вашего удобства. Мы не можем гарантировать точность или надежность переведенного контента. Если у вас есть вопросы о точности переведенного контента, обращайтесь к официальной английской версии веб-страницы.
Узнайте, как мы вывели игру в жанре ролевой игры на новый уровень с помощью родных 2D-инструментов Unity.

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

Демо-изображение Dragon Crashers
Подпись: Попробовать демо-версию игры можно здесь. Убедитесь, что вы используете браузер, совместимый с WebGL 2.0, например Google Chrome, чтобы запустить демо-версию на своем браузере, так как на экране появится бездействующая ролевая игра, и вы сможете вызывать специальные атаки, когда счетчик зарядится.

С тех пор наша команда 2D оптимизировала эти рабочие процессы и усовершенствовала графическую технологию: 2D Renderer внутри Universal Render Pipeline. Нет лучшего способа испытать эти инструменты и увидеть, как они могут заставить ваши 2D-изображения сиять, чем изучить новый пример проекта. Dragon Crashers уже доступна бесплатно в Asset Store.

Скачать из Asset Store

О Dragon Crashers

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.

скриншот Unity Hub

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

Изображение, полученное в Unity при выборе "Загрузить меню игры".

Мы рекомендуем использовать настройки дисплея высокой четкости при просмотре игры, например, 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.

Скриншот игры в редакторе
Белые плитки земли в игре не выглядят белыми из-за атмосферного 2D-освещения, добавленного в окружение.

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

Скриншот игры в редакторе. Здесь есть пещеры.
Эти четыре слоя фона - простые повторяющиеся спрайты.

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

Скриншот игры в редакторе. Здесь есть железнодорожные пути.

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

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

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

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

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

Скриншот редактора с игровым артом/объектами.
Этот игровой арт был создан с помощью Affinity Designer. Художник Ярослав одновременно создавал карты нормалей и карты масок - этот процесс мы рассмотрим в одном из следующих блогов.

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

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

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

Альфа-выцветание брызг
Плавная анимация этой частицы была создана из одной единственной текстуры и анимированной альфа-обтравки, примененной с помощью Shader Graph.
Раскрашивание сцены с помощью 2D-светильников

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

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

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

Кроме того, вы можете усилить погружение, анимировав эти элементы. Например, префаб P_Lantern_HangingFromPost показывает, как прикрепить свет к анимированному объекту, или дать персонажу-ведьме посох с частицами Sprite-Lit.

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

Архитектура игрового процесса

Для создания, структурирования, управления и итерации игрового процесса в нашем демо-проекте использовалась комбинация Scriptable Objects и Prefabs.

Все семь персонажей, независимо от того, герои они или злодеи, наследуют свою основную структуру от базового Unit Prefab и используют один и тот же код поведения. Чтобы разграничить значения между персонажами, мы использовали объекты Scriptable Objects для различных "блоков" значений, основанных на единицах измерения. Жестко закодированные значения затрудняют балансировку игры для непрограммистов и делают геймплей негибким, поэтому мы установили такие значения единиц, как "Величина урона атаки", "Время затухания способности в секундах" и "Здоровье юнита" в скриптовых объектах, чтобы каждый, кто работает над проектом, мог быстро внести коррективы. Эти изменения значений затем динамически обрабатываются игровым кодом.

Скриншот редактора Unity

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

Блок-схема контроллера устройства

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

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

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

Блок-схема пакетов
Timeline и сигналы

Функция 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" в непрерывную атаку, например, когда дракон дышит огнем на группу героев.

Персонажи Dragon Crashers сражаются с драконом с открытым редактором в нижней половине экрана
Посмотрите вебинар по Dragon Crashers (и получите несколько подарков)

Старший глобальный разработчик контента Энди Тач провел вебинар с демонстрацией в редакторе рабочего процесса Character Pipeline Workflow, который использовался для создания проекта. На этом вебинаре вы узнаете, как:

  • Экспорт 2D-персонажа из Photoshop в Unity
  • Настройка спрайта персонажа
  • Настройка IK для конечностей персонажа
  • Используйте замену спрайтов для создания различных визуальных образов персонажей
  • Используйте вложенные префабы для вложений в оружие
  • Применение карт нормалей и масок для 2D стилей освещения
  • Последовательность способностей персонажей с помощью Timeline

В знак благодарности за то, что вы вместе с нами изучили Dragon Crashers, мы хотели бы поделиться с вами набором обоев, фонов для Zoom и других визуальных элементов, которые будут вдохновлять вас на протяжении всего вашего пути разработчика 2D-игр. Получить фоны Dragon Crasher можно здесь.

Фоны Dragon Crashers на ПК, ноутбуке и планшете.
Другие 2D-ресурсы

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