King, Witch and Dragon. Отчёт 3

Начал работу над третей процедурной способностью персонажа - щупальце, которое используется в качестве крюка-кошки.

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

Описание фичи

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

Концепт арт сделанный несколько месяцев назад, на старте проекта​
Концепт арт сделанный несколько месяцев назад, на старте проекта​

Процедурная генерация всего

Если для предыдущих способностей я делал полную или частичную процедурную анимацию, то для щупальца я решил сделать процедурным всё, включая модель щупальца.

В момент активации способности игра начинает в реальном времени

  • генерировать модель щупальца с присосками
  • назначать UV-координаты точкам
  • накладвать материал с текстурой
  • рассчитывать нормали поверхности
  • изгибать, скручивать и смещать щупальце в соотвествии с заданными параметрами

Ручное прописывание массивов точек, UV-координат, треугольников и прочего, даже с использованием циклов, то ещё удовольствие. Но если вам всё таки интересно глубже изучить тему процедурной генерации моделей в Unity, я рекомендую почитать статью на Catlike Coding и посмотреть серию видео на канале Board To Bits

Что получилось?

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

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

Даже так щупальце уже выглядит приемлимо, но я решил на этом не останавливаться.

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

С помощью этого инструмента можно, например:

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

Вот так щупальце выглядит, относительно статичного персонажа:

Что дальше?

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

Ну а пока, если вам интересен проект, подписывайтесь на меня в Instagram и Twitter, а также вступайте в группу VK, в которой я публикую апдейты и материалы по проекту до того как они попадают сюда.

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

2828 показов
228228 открытий
9 комментариев

Как же круто выглядят все твои анимации

Ответить

Спасибо :)

Ответить

Давненько поглядываю за постами. Полностью один всё делаешь?

Ответить

Всё, что связано с геймдизайном, артом и кодом - сам. 

Ответить

Правая рука-тентакль.

Одно это может продать игру )
Я бы ставил даже в название ))

Ответить

Не прокатит... тентакля на левой руке XD

Ответить

Уверен, что эта игра полюбому возьмёт какую-нибудь награду! круто!

Ответить