Когда-то давно, в одной из первых своих статей про анимацию я упомянул физику тряпичной куклы, в прошлой статье рубрики ругался на колеса и захотел сотворить свои, а еще рассказал как в сталкере можно винтовкой вскрыть дверь.
Бессвязной дичью кажется это вам, но позвольте возразить : господа joints успели побывать в каждой из них в разных формах. Мне почему-то сложно обозвать это дело русским термином ибо они принимают разные функции.
Я накатал демку и уселся писать с твердым намерением показать, объяснить и побаловаться с сочлен..кхм соединениями меж игровых объектов, подверженных физике!
Соединение?
Самый простейший способ соединить подверженные физике объекты - фиксированный joint. Зачем? Прилепленный объект может смещать центр тяжести и вообще отлететь при определенных нагрузках/вращениях.
Отдаленно напоминающий объект современного искусства, на деле является лишь фиксированным соединением. Скучно?
Их может разделить пушка из статьи про разрушения!
Присоединяемый объект принимает фиксированную относительно родительского позицию, чтобы их разделить можно использовать силу или вращение. Ядро приложило силу.
Шарнир?
Подбираемся к интересному. В сталкере на мой взгляд была использована как раз подобная механика дверей, в Unity она обзывается Hinge Joint и имеет широкое использование, однако покажу так же на примере дверей.
Увы мой персонаж движим не тем компонентом внутриигровой физики, что используется для всего остального, поэтому получается так :
Даже если на него повесить компоненты, то будет способен лишь остановить дверь или чуть подтолкнуть.
Обделять интересностями не буду. Вот шустрый куб :
Настраивается кручение вокруг определенной оси и возможные ограничения поворота, можно придать силу кручения ибо joint универсальный, можно сделать пружинистость, но об этом позже.
В компоненте физики и без всяких шарниров можно настроить массу дверки и сопротивление воздуху, что позволит создать дверь мечты.
Пружина?
Отдельный joint нашелся и для пружины. Вот как интересно работает :
Есть несколько основных настроек : упругость определяет в какой-то степени дальность откидывания объекта, но важно не забывать что его вес тоже играет роль; скорость отскока определяет очевидно скорость возвращения в обычную позицию, которую конечно можно задать; толерантность влияет на силу отбрасывания представителей социальных меньшинств :
Хорошо, извините. Параметр tolerance обозначает погрешность.
Суставы?
А вот болванчика без них не сделать.
Как я уже ранее объяснял, на каждую косточку персонажа задается коллайдер с физикой и при отключении анимаций он падает. Вот как выглядят эти коллайдеры :
Соединены они как раз с помощью joints, но Character Joint, который имеет в себе так же настройки ограничения вращения в каждом из направлений.
Вес персонажа в 80 кг по честному распределен между этим физически-корректными коллайдерами.
Вообще его падение вы уже увидели, поэтому вот :
И всё это joint. В гифках с пружинками небольшие артефакты, вероятно программа записи пыталась оптимизировать изображение и сделала это крайне неудачно. О чем я говорил в начале? Статья о процедурной анимации (там тоже примеры в демке), колеса и как сломали Stalker.
Другие статьи с канала :
Игры изнутри : коллайдеры и столкновения
Как работает стрельба в играх
Как работает разрушаемость (пушка там же)