Раздел: Игры >> Ninja At The Top - 3D platformer-adventure
Ninja At The Top - 3D platformer-adventure
Летом 2016г. я начал изучение движка Unity. На тот момент я уже был наслышан о его легкости в освоении и удобстве в работе
с 3D-графикой и анимацией. И он меня не разочаровал. В ходе долгих экспериментов с движком, я убедился в его широких возможностях и решил попробовать перенести на него свой старый
проект о приключениях ниндзя в древних руинах, сделанный на Blitz3D. Напомню, что ключевыми особенностями геймплея данного проекта являются прыжки по платформам на большой
высоте, маневрирование в воздухе, преодоление ловушек, решение головоломок, а также исследование больших локаций и лабиринтов в поисках артефактов. Кроме этого планировалось добавить
несложную боевую систему, наподобие серии Gothic, взаимодействие с NPC и выполнение некоторых побочных квестов. К сожалению из-за ограничений Blitz3D и недостатка знаний
и опыта, мне не удалось в полной мере реализовать все свои идеи и проект был заброшен.
Для возрождения старого проекта на новом движке я в первую очередь переделал модель главного героя. Теперь она стала более детализированной и обзавелась картой
нормалей. Также я перенес в новую версию одну из высотных построек - башню с глазом, она была существенно доработана. Освещение уровня стало более реалистичным, добавлены некоторые
пост-эффекты. Наряду с продвинутым освещением, Unity имеет встроенный физический движок, поэтому персонаж и камера больше не проваливаются сквозь стены, как это было в старой версии.
Поскольку в игре придется много бегать, игрок будет вынужден постоянно смотреть на зацикленную анимацию бега персонажа, что не очень-то увлекательно.
Для решения этой проблемы мне хотелось реализовать такую анимацию, которая бы адаптировалась к поверхности земли или пола. Например, если персонаж бежит в гору, то он должен ставить
ноги в соответствии с углом наклона поверхности. По сути необходимо было корректировать анимацию бега в реальном времени так, чтобы ступни ставились четко на поверхность, не проваливаясь
сквозь нее. Задача, мягко говоря, не из легких. Но к счастью, Unity предоставляет огромную свободу действий при работе со скелетной анимацией. Об этом я и мечтать не
мог во времена Blitz3D!
После множества неудачных попыток, мне все же удалось получить некое подобие полупроцедурной анимации бега. В момент, когда персонаж заносит ногу вперед,
производится raycast из ступни вниз и в точке пересечения с землей ставится ее IKGoal. Далее с помощью заранее настроенных кривых (weight curves), вес анимации плавно снижается, тем самым
перемещая ногу к фиксированной на земле точке IKGoal. И там она остается до тех пор, пока согласно анимации, персонаж не оторвет ногу от земли и не занесет ее назад. В этот момент,
опять же с помощью кривых, вес анимации плавно возрастает, возвращая ногу в полностью анимированное состояние. Аналогичным способом контролируется и вторая нога.
Разумеется результат не идеален и еще требует доработки. Но даже в таком варианте, процесс бега выглядит гораздо более живо и интересно, нежели стандартная зацикленная анимация.
Похожим методом я позже сделал адаптивную idle-анимацию (стойку на месте). Теперь ниндзя мог принимать эпичную стойку, поставив ногу на холм и устремив взор за горизонт.
После этого я решил пойти еще дальше и реализовать адаптивный бег по лестницам! Расчет положения ног практически идентичен бегу по неровностям, лишь с
некоторыми дополнительными проверками положения ступни.
Вот, что из этого получилось:
Результат опять же далек от идеала и зачастую выглядит крайне неестественно и даже комично, но это лишь добавляет интереса такому, казалось бы, рутинному действию,
как бег по лестнице.
Очень важным аспектом геймплея является падение с большой высоты. Локации построены так, что оно будет происходить довольно часто. Поэтому анимация падения
должна выглядеть эффектно, чтобы каждый раз за ней было интересно наблюдать. В версии на Blitz3D это было реализовано довольно примитивно: зацикленная анимация падения сменяется
анимацией удара об землю при столкновении с какой-либо поверхностью. Но в Unity есть встроенный физический движок, а значит и поддержка ragdoll, которая позволяет существенно
улучшить взаимодействие тела с окружением. Прыжок в игре я сделал так, что направление движения персонажа можно менять в воздухе. Но если время падения превышает определенный лимит,
персонаж переходит в неуправляемое состояние ragdoll'а. При этом когда в полете персонаж ударяется о различные выступы, я добавил всплески крови. В результате получилось очень эффектное
падение, за которым интересно наблюдать. Однако возникла одна загвоздка. Она заключается в необходимости перехода персонажа из состояния ragdoll к анимации. В этом кроется еще одна важная
часть геймплея - ниндзя не умирает после падения с большой высоты, а поднимается и продолжает игру в обычном режиме.
Я сделал две анимации подъема из лежачего состояния в idle-позу в зависимости от положения тела персонажа после симуляции ragdoll. Но проблема в том,
что анимация начинается с определенной фиксированной позы, а положение частей тела ей явно не соответствует, потому что симуляция ragdoll каждый раз заканчивается соверешенно непредсказуемо.
Необходимо было сделать плавный переход от ragdoll-позы к стартовой позе анимации подъема. Пришлось изучить немало документации и различных статей. Оказалось, что нужного мне эффекта можно
достичь, используя функции LateUpdate() и Quaternion.Slerp для плавного вращения частей тела между двумя ключевыми положениями. Результат оказался вполне удачным.
Итак, что уже сделано в общем на сегодняшний день:
- небольшая локация с почти завершенной постройкой со всей "начинкой";
- основные движения главного персонажа;
- полупроцедурная анимации бега, позволяющей бегать по неровностям и лестницам;
- сбор предметов и взаимодействие с ключевыми объектами уровня;
- ragdoll при падении с большой высоты;
- кат-сцены при выполнении ключевых заданий;
- вражеский NPC;
- еще много мелочей.
И в заключение немного геймплея:
Пока полноценная локация еще в разработке, представляю вашему вниманию небольшое техно-демо с демонстрацией основных возможностей персонажа. Скачать его можно по ссылке ниже.
Управление: w,a,s,d - передвижение, пробел - прыжок, мышь - управление камерой.

Комментарии
Зарегистрируйтесь, чтобы оставить комментарий.