King, Witch and Dragon. DevLog #14

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

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

Обычно, когда речь заходит о блокинге, рассматриваются следующие варианты:

  • Сборка уровня из готовых примитивов, предоставляемых движком (кубы, сферы, капсулы т.д.)
  • Создание геометрии используя базовые инструменты моделирования, такие как создание дополнительных ребер, экструд, манипулирование вершинами и т.д. В Unity это позволяют делать плагины типа ProBuilder и UModeller.
  • Если речь идёт о 2D игре, то часто используются редакторы тайлов.

Я попробовал все 3 описанных подхода и сейчас чуть более подробно расскажу, почему они мне не подошли.

Чтобы вы лучше понимали контекст, напомню, что я делаю 2.5D игру, в которой окружение трёхмерное, но весь геймплей происходит в 2D плоскости с видом сбоку.

Сборка макета уровня из стандартных примитивов

Это, пожалуй, самый дешёвый и самый нетребовательный способ, но при этом далеко не самый эффективный. Именно его я использовал для создания тестового уровня.

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

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

Также проблемы могут возникнуть при стыковке наклонных платформ. Если вы хотите, чтобы нигде не было щелей и торчащих углов, скорее всего придется использовать vertex snapping, но тогда съедет привязка к сетке и все последующие платформы также придется присоединять с помощью vertex snapping'a. Жить с этим можно, но неочень удобно.

Моделирование геометрии

ProBuilder

Этот метод наиболее распространён при блокинге трёхмерных уровней для игр от первого/третьего лица. И хотя инструменты моделирования значительно уступают профессиональным инструментам типа Maya и Blender, они позволяют создавать и редактировать геометрию прямо в контексте уровня, минуя этап импорта/экспорта.

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

  • добавить в нужном месте edge loop;
  • подвинуть его в нужное место;
  • переключиться из side view в prespective view и повернуть камеру (не получится редактировать геомтерию, находясь только в side view, что имеет смысл, когда работаешь над платформером с видом сбоку);
  • выделить нужные полигоны;
  • заэкструдить их;
  • в конце подвигать новые вертексы с привязкой к сетке, чтобы получить точные размеры и формы, чтобы избежать проблем, описанных в предыдущем разделе.

И вот эту последовательность действий придётся повторять постоянно...

Я понял, что мне такое совсем не подходит и продолжил поиски.

Создание тайловых карт

TilEd

Глядя на современные инструменты для работы с tilemap'ами, мне всегда казалось, что это один из лучших инструментов левел дизайна, благодаря простоте и скорости работы.

Есть как нативные инструменты типа Unity Tilemap Editor так и third-party инструменты, которые можно использовать независимо от движка, типа TilEd (Carrion, Axiom Verge, Shovel Knight).

Вы создаёте палитру спрайтов, потом выбираете нужный спрайт и кисточкой рисуете по сетке. Современные инструменты также предоставляют "умные" спрайты, которые еще больше облегчают и ускоряют работу.

Именно такого процесса и пайплайна я бы хотел добиться на своём проекте. Главная проблема, что все эти инструменты заточены под использование 2D-спрайтов, а у меня кругом 3D-геометрия и это проблема... или нет?

Использование редактора тайлов в 2.5D игре

Я долго искал решение этой проблемы и думал, как можно адаптировать инструменты и пайплайн работы со спрайтами под мой проект.

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

Хорошо, что я этого не сделал... ведь я нашёл более подходящее решение.

Я начал детально изучать инструментарий и наткнулся вот на этот репозиторий:

Это пекедж, который расширяет функционал 2D инструментов Unity. И это оказалось именно тем, что я искал!

Немного поясню. Когда вы работаете со стандартным Tilemap Editor'ом, вам доступна только 1 базовая кисть, которой вы можете рисовать тайлы на сетке.

Выпадающий список, в котором только Default Brush.
Выпадающий список, в котором только Default Brush.

Но после установки 2d-extras, картина меняется и добавляются новые кисти:

Новые кисти добавленные после установки 2d-extras.
Новые кисти добавленные после установки 2d-extras.

И в этом списке можно найти кисть под названием GameObject Brush, которая, как нетурдно догадаться из названия, позволяет "рисовать" геймобджектами или префабами. То есть да, буквально то, что я и хотел. Проблема решена!

Вы можете использовать TileMap Editor для расстановки трёхмерных объектов на уровне с помощью кисти.

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

На практике это выглядит примерно так:

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

Единственным, на мой взгляд, недочётом является то, что этот пекедж не отображается в Package Manager'e и его нужно добавлять вручную, но на странице репозитория есть подробная инструкция как это сделать.

В общем, после этого осталось только наделать себе "строительных кубиков" и приступать к полноценному блокингу.

Создаём кубики

Когда я писал про сеттинги, я упоминал, что для каждого сеттинга хочу сделать возможность применить способности персонажа по-новому, в другом контексте. С тех пор список немного поменялся, так как не все выбранные механики оказались такими уж интересными на практике. Сейчас доработанный список выглядит так:

Синие - лапы паука; Зеленые - змея; Красные - щупальце; Оранжевые - крылья летучей мыши.
Синие - лапы паука; Зеленые - змея; Красные - щупальце; Оранжевые - крылья летучей мыши.

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

Обычные шипы

Наносят урон при контактке. Невозможно пройти насквозь.

Разрушаемая стена

Разрушается через пару секунд после того как по ней прополз персонаж. Восстанавливается по таймеру.

Стена, покрывающаяся шипами

В тех местах, где прополз персонаж вырастают шипы. Пропадают по таймеру.

Огонь/лава

Наносит урон при контакте. Можно пройти насквозь в форме змеи.

Песок

Твердое препятствие, не наносит урон. Можно пройти насквозь в форме змеи.

Разрушаемые объекты

Объекты и стены, которые нельзя разрушить обычной атакой, но можно разбить с помощью рывка змеи.

Липкие стены

Стены, к которым может цепляться щупальце (обычно им можно зацепиться только за специальные крюки).

Решётки

Сквозь них нельзя пройти (даже в форме змеи), они не наносят урон, но сквозь них можно пустить щупальце, например, чтобы дёрнуть за рычаг.

Обычные крюки

Статичные крюки за которые можно схватиться щупальцем и подтянуться.

Подвижные крюки

Крюки, которые зацикленно двигаются по заданной траектории.

Подвижные крюки которые активируются при захвате

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

Восходящий поток

Позволяет подниматься вверх на расправленных крыльях.

Ветер

Сдувает персонажа в указанном направлении.

Что дальше?

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

Чтобы поддержать разработку игры, добавляйте King, Witch and Dragon в вишлист на Steam, это важно не только для моей мотивации, но и для алгоритмов Steam. Чтобы принять участие в обсуждении, вступайте в telegram-группу и группу ВК, а также подписывайтесь на меня в Twitter и Instagram.

Спасибо за внимание!

101101
15 комментариев

Вот это круто. Описание геймплейных механик мне понравилось!

7
Ответить

Вспоминая первые посты с рисованием персонажа и обкатки первичной анимации - прогресс колоссальный :) Круто, что не бросил всё это :)

5
Ответить

Ура, наконец новая статья!
Всё выглядит круто, но... нереалистично? )
Что это за решётка такая, что может пролезть щупальце, но не змея? Что это за объекты такие, что разрушаются от змеи, но не от меча? Это немного странно...

2
Ответить

Про решётку это чистая игровая условность.

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

В общем, мне кажется, тут можно придумать что-то интересное.

4
Ответить

Пост, как всегда — пушка.
Вопрос (не помню, может быть, уже спрашивал): Сколько времени уходит на работу над игрой в день?

Ответить

2-3 часа в день по вечерам.

3
Ответить

Очень крутой арт и анимации персонажа. Особенно прикололи паучьи лапы. Это 3д модель или спрайт?

1
Ответить