‹›
Aktuální projekt

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#

GML
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íkSignaturaKontrakt operace
jolt_asset_create_ragdolljolt_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.destroyJoltRagdoll.destroy()Boolean; is_valid ověří všechny části. Destroy odpojí renderer a zničí klouby/části, model nezničí; vrací společný úspěch.
JoltRagdoll.get_bodyJoltRagdoll.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_transformJoltRagdoll.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_enabledJoltRagdoll.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_validJoltRagdoll.is_valid()Boolean; is_valid ověří všechny části. Destroy odpojí renderer a zničí klouby/části, model nezničí; vrací společný úspěch.
JoltRagdoll.renderJoltRagdoll.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_enabledJoltRagdoll.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_animationJoltRagdoll.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_positionJoltRagdoll.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_rendererJoltRagdoll.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_eulerJoltRagdoll.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_velocityJoltRagdoll.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.updateJoltRagdoll.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í.