Решил поиграться с физикой Проиграл
С чего всё началось
До начала хакатона, я занялся обдумыванием будущей концепции проекта, который я собственно и реализую к такому, так скажем, конкурсу.
Изначально была идея сделать слешер, с механикой перемещения аля Sonic, и цепочкой, с помощью которой можно было бы хвататься за различные поверхности и прокручивать физически обоснованные кульбиты на 360, успевая при этом атаковать рядом стоящих, не дружелюбных персонажей.
Но разложив по полочкам механики, которые бы предстояло реализовать, а еще дополнительно что-то изучить, я понял что данную идею в одиночку невозможно сделать за сутки, если конечно вы не сталкивались с реализацией чего-то подобного, в прошлом.
Почитав статью "Хороший кор, плохой кор: создание и проработка геймплея новой игры" там говорилось, "что для итеративной разработки, лучше всего использовать быстрое прототипирование, для того чтобы найти какие-то цепляющие, геймплейные фичи".
Установив эту мысль как собственную парадигму я приступил проекту, но к сожалению - никакого быстрого прототипирования не вышло.
Перед началом создания прототипа, проанализировав за счёт чего чаще и лучше будет появляться желание к реиграбельности, я понял то, что реиграбельность рождается за счёт большого количества интересных вариативностей механик геймплея, но время было не резиновым, да и команду собрать так и не получилось, поэтому я подумал на счёт физики.
Физика в игровом мире рождает много фана и генерирует порой какие-то новые возможности, о которых бывает даже не задумывается разработчик, поэтому я думаю что поддержка и построение игры на физике, способно привлекать людей к такой игре как можно чаще, за счёт разного поведения той, или иной физической механики, в очередной итерации геймплея.
Вспомнить хотя бы какой-нибудь Gang Beasts или HD серию Grand Theft Auto, где в обоих вселенных анимация тел работает за счёт физических свойств и других, прочих аддитивных компонентов, дающие самые забавные ситуации в игровом мире
И это конечно же не единственные возможности этих игр, за счёт чего они многим и полюбились.
По крайней мере, серия GTA.
Поэтому остановившись на том, что физика это мой путь, я вспомнил про один из самых моих любимых мультов, начала нулевых - "Планета сокровищ"
И о том, что в мульте присутствовал такой вот ховерборд.
Я понял, что, наверное было бы круто перенести данный инструмент перемещения в виртуальное пространство и насытить игровой мир препятствиями, местами для трюков, исполинских размеров сооружениями, по поверхностям которых можно было бы перемещаться и например, сражаться с кем-то.
В общем, я загорелся и набросал первый прототип.
(гифка так просто, не по теме, так как скриншотов на раннем этапе не делал)
Создание прототипа
Быстрого прототипирования так и не вышло
Изначально я реализовал сценарий борда, а именно:
- Левитацию, за счёт фиксированной точки на поверхности, со смещением по высоте и применения к этой точке физической силы, по отношению к физическому объекту борда
- Стандартное перемещение посредством ввода команд с клавиатуры
- Ускорение сил перемещения борда
- Остановку перемещения
- И самое интересное, это вращение объекта по вектору нормали, которое за счёт дополнительной интерполяции выглядит так, словно герой самостоятельно пытается фиксироваться и подстраивать свой борд под ландшафт поверхности
Долгое время провёл над тестами всех механик которые я собрал в контроллере борда и по итогу, настроив контроллер более-менее приемлемым образом, я начал думать над механикой тела.
Процедурная анимация или же физика?
Во время обдумывания механики тела, я решил изначально отдать своё предпочтение физике, так как это могло дать еще более крутую связку с бордом, и за счёт удочерения физического тела, с правильной его настройкой в сам объект борда, я бы мог получить очень реалистичное поведение костей, и классную инерцию всей конструкции.
Но с физикой работать довольно таки не просто и из-за большого количества проблем, которые стоит учесть, это именно огромное количество параметров настройки для каждого джоинта, которые специализируются под определенные задачи, правильное применение сил и невозможность более легкого ограничения перемещения, или вращения физического объекта.
В общем, главная тема этих проблем с физикой, это минимальный контроль, который я могу себе позволить, со своими, не глубокими познаниями в математике и физике. Собственно это и ограниченный запас времени дали мне понять, что лучше мне пока с этим точно не тратить времени, и перейти к процедурной анимации, тем более с этим я уже был довольно таки давно знаком.
Сценарий тела я решил сообразить на основе инверсной кинематики, и с помощью манипуляторов, я бы мог спокойно настроить нужное мне поведение, вплоть до той самой, классной инерции с бордом.
Собсна я так и сделал, а именно:
- Реализовал простой компонент IK на две конечности
- Создал необходимые конечности для тела: руки, ноги, туловище
(голову дома забыл) - Наделал целевых точек для конечностей
- Нацепил на каждую родительскую кость по IK компонентам
- Всё настроил и перешёл к контролеру тела
Для прототипа, контролер тела должен был мне дать:
- Контролируемую симуляцию инерции
- Управление конечностями для совершения каких-то процедурных взаимодействий
- И т.д.
С первым пунктом я кое-как справился, а вот с остальным из-за долгих тестов и настройки, справится уже было невозможно.
Падение
На часах уже было 21:00, а я не сделал даже половины того, что родилось в голове.
Экстренно я начал соображать что еще я могу добавить, чтобы этот прототип выглядел хоть чуть-чуть, но более-менее сносно.
И тут.
Во мне проснулся говнокодер, которого я долго пытался побороть изучая шаблоны и общие принципы ООП.
Я начал нашпиговывать первый, попавшийся мне класс всякими переменными, с абстрактными названиями ради того, чтобы у меня получилось быстрее накинуть все необходимые объекты и увидеть нужные мне результаты.
По итогу говнокода и тестирования функционала я успел сделать базовое прицеливание, стрельбу и самый простейший ИИ-шник, который был базирован на контролере борда и имел в себе функции перемещаться вперед, и менять своё направление, математическим, методом синуса.
Катарсис
Оставалось меньше получаса до конца хакатона, и я думал процесс сбора может оказаться слишком долгим, да и загрузка билда из-за не лучшего интернета в регионе могла хорошенько подпортить нервы.
Но в этом плане мне повезло, на всё про всё ушло примерно 15 минут.
И я был доволен что успел.
Но остался недоволен результатом проделанной работы, которая в голове выстраивалась как очередное творение Фумито Уэда.
Но, в любом случае было интересно, впервые поучаствовать в таком, так скажем, дедлайн марафоне, где приходилось в короткие сроки генерировать какую-ту интересную идею и пытаться из этой идеи, вывести какой-нибудь интересный продукт.
С этим каркасом и ежу понятно что никакой конкурс он не возьмет, но, зато теперь я имею годную как мне кажется идею и хорошую базу, которую остается только наращивать.
Спасибо DTF и Playgendary за такое событие, которое смотивировало к действию денежной единицей, но по итогу, дала нечто большее.