Хочешь, чтобы персонаж при смерти или ударе обмякал и падал тряпичной куклой, а не оставался деревянным? Это и есть рэгдолл, и для R6-моделей он делается своими руками на Lua. Разберём по-справочному: чем R6 отличается от R15, из каких суставов он собран, как превратить жёсткие соединения в шарниры и переключить персонажа в физику. В конце — цельный разбор рабочего скрипта и как применить его к NPC, а не только к игроку.

Рэгдолл и чем R6 отличается от R15

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

Разница между R6 и R15 тут принципиальна, и её надо понимать. R6 — старая простая схема из шести частей тела с небольшим набором суставов: шея, два плеча, два бедра и корневой сустав. R15 — новая, из пятнадцати частей с куда большим числом соединений. Код рэгдолла в обоих случаях идейно один, но конкретные суставы разные, поэтому скрипт для R15 на R6 не заведётся как есть. Мы говорим именно про R6 — его меньше, и разбираться в нём проще. Ещё пара слов о самой идее, чтобы код дальше не казался магией. Всё, что делает рэгдолл, — это подмена типа соединения: жёсткий мотор фиксирует части в одной позе, а шарнир позволяет им свободно вращаться. Мы не ломаем персонажа и не создаём его заново — мы лишь на время меняем правила, по которым его части держатся друг за друга. Захотел вернуть — поменял правила обратно. Понимание этого сразу снимает страх перед физикой: ты просто переключаешь тело между двумя режимами, жёстким и тряпичным.

Из чего состоит скелет R6

Чтобы менять суставы, надо знать, где они лежат. В R6 части соединены через Motor6D — это и есть жёсткие «моторы», держащие позу. Шея (Neck) соединяет голову с торсом, два плечевых сустава — руки с торсом, два бедренных — ноги с торсом, а корневой сустав (RootJoint) держит торс на HumanoidRootPart.

Почти все эти моторы живут внутри Torso, а корневой — в HumanoidRootPart. Наша задача — пройтись по всем Motor6D персонажа и каждый заменить на шарнир, который позволит частям свободно болтаться. Зная этот небольшой список суставов, ты уже понимаешь весь объём работы: их немного, и обработать их можно одним циклом. Полезно и знать, зачем вообще искать моторы циклом, а не перечислять их вручную. Да, в R6 суставов ровно шесть, и их можно было бы перебрать по именам. Но цикл по всем Motor6D надёжнее: он поймает любой сустав независимо от имени и сработает, даже если модель чуть отличается от стандартной. Поэтому в коде мы и пробегаем по всем потомкам персонажа, отбирая те, что являются Motor6D, — так скрипт универсальнее и не сломается на нестандартном рике.