Ragdolly v GameMakeru
Vytvoření ověří názvy kostí, hierarchii a rest pózu před sestavením propojených těles a interních SwingTwist/SixDOF kloubů. Chyba vrací undefined a uklidí částečné prostředky. Fyzika používá stávající jolt_update; registrovaný renderer automaticky obnovuje skinning. Nekreslete přes něj původní animovanou instanci. Modely/materiály zůstávají vlastnictvím hry.
Příklad#
model = new BBMOD_Model("character.bbmod");
asset = jolt_asset_load("character.jolt.json");
// After jolt_start():
ragdoll = jolt_asset_create_ragdoll(asset, model);
if (!is_undefined(ragdoll)) {
ragdoll.set_position(0, 0, 2);
ragdoll.set_renderer(o_control_bbmod_renderer.renderer);
ragdoll.set_grab_enabled(true);
}Použití a omezení#
Při přechodu z animace nejprve aktualizujte animační přehrávač, nastavte transformaci ragdoll assetu a před dalším fyzikálním krokem volejte set_pose_from_animation(player). set_velocity(x,y,z) předá požadovanou rychlost; rychlosti končetin se neodhadují. Jde o pasivní fyziku bez aktivního řízení pózy, automatického vstávání nebo přechodu zpět do animace.
get_body(key_or_uuid) zpřístupní část. get_bone_transform(name) vrací světový počátek kosti, ne střed tvaru. set_grab_enabled(true) povolí Carry všem částem; výchozí je vypnuté. Drží se vybraná část a ostatní následují klouby. Vypnutí či zničení pustí úchop. Interní klouby jsou povoleny; obyčejné vnější vazby zůstávají omezením. Limity hmotnosti/síly Carry se vztahují na vybranou část. destroy odstraní vlastní klouby a tělesa před vypnutím světa.
Přehled API#
Signatury veřejných funkcí a metod. Metody volejte na vrácené instanci; parametry s výchozí hodnotou jsou volitelné.
Související návody#
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| jolt_asset_create_ragdoll | jolt_asset_create_ragdoll(asset,model) | Validovaný ragdoll asset + načtený skinned BBMOD model se shodnými uzly/bind pose. JoltRagdoll/undefined, při chybě uklidí vytvořené části. Vlastní fyzikální části/klouby, model je půjčený. |
| JoltRagdoll.destroy | JoltRagdoll.destroy() | Boolean; is_valid ověří všechny části. Destroy odpojí renderer a zničí klouby/části, model nezničí; vrací společný úspěch. |
| JoltRagdoll.get_body | JoltRagdoll.get_body(ref) | Přesný string ref části → JoltBody/undefined; název bone → aktuální světový transform/undefined po update. Vnitřní body nevlastní volající; jeho destroy zneplatní ragdoll. |
| JoltRagdoll.get_bone_transform | JoltRagdoll.get_bone_transform(name) | Přesný string ref části → JoltBody/undefined; název bone → aktuální světový transform/undefined po update. Vnitřní body nevlastní volající; jeho destroy zneplatní ragdoll. |
| JoltRagdoll.get_grab_enabled | JoltRagdoll.get_grab_enabled() | Boolean/0/1 pro všechny fyzikální části, default false. Setter Boolean, vypnutí pustí drženou část; getter true jen když jsou povolené všechny části a ragdoll platný. |
| JoltRagdoll.is_valid | JoltRagdoll.is_valid() | Boolean; is_valid ověří všechny části. Destroy odpojí renderer a zničí klouby/části, model nezničí; vrací společný úspěch. |
| JoltRagdoll.render | JoltRagdoll.render() | Update Boolean sestaví kostní transformy z fyziky bez kroku solveru. Render zavolá update a Model.render se skinem a identity matrix, bez návratového potvrzení. |
| JoltRagdoll.set_grab_enabled | JoltRagdoll.set_grab_enabled(enabled) | Boolean/0/1 pro všechny fyzikální části, default false. Setter Boolean, vypnutí pustí drženou část; getter true jen když jsou povolené všechny části a ragdoll platný. |
| JoltRagdoll.set_pose_from_animation | JoltRagdoll.set_pose_from_animation(player) | Matching aktualizovaný BBMOD AnimationPlayer; Boolean. Po nastavení ragdoll pozice/rotace, před fyzikálním krokem přenese pose a vynuluje lineární/úhlové rychlosti. Není průběžné blending/IK. |
| JoltRagdoll.set_position | JoltRagdoll.set_position(x,y,z) | Boolean; světový origin XYZ m / Euler XYZ° přesune celou sestavu se zachováním relativních rámců, velocity XYZ m/s nastaví všem částem. Změny postupují po částech, nejsou transakční. |
| JoltRagdoll.set_renderer | JoltRagdoll.set_renderer(renderer) | Renderer s add/remove nebo undefined; Boolean, provede odpojení/připojení sám, nepřidávej ragdoll dvakrát. |
| JoltRagdoll.set_rotation_euler | JoltRagdoll.set_rotation_euler(x,y,z) | Boolean; světový origin XYZ m / Euler XYZ° přesune celou sestavu se zachováním relativních rámců, velocity XYZ m/s nastaví všem částem. Změny postupují po částech, nejsou transakční. |
| JoltRagdoll.set_velocity | JoltRagdoll.set_velocity(x,y,z) | Boolean; světový origin XYZ m / Euler XYZ° přesune celou sestavu se zachováním relativních rámců, velocity XYZ m/s nastaví všem částem. Změny postupují po částech, nejsou transakční. |
| JoltRagdoll.update | JoltRagdoll.update() | Update Boolean sestaví kostní transformy z fyziky bez kroku solveru. Render zavolá update a Model.render se skinem a identity matrix, bez návratového potvrzení. |