Physical skeletons, active ragdolls and 4.3

Godot Version

4.3

Question

I’ve been working on an active ragdoll game in 4.2 but after changing to 4.3 it is not working anymore, almost certainly due to changes from the SkeletonModifier3d system. I’ve been reading through the docs there but I am unsure how to replicate the behaviour I had previously.

Quite simply, before I would look at the difference between the ragdoll and a guide animation and apply a force to the ragdoll to bring them together, like so:

var bone_target := target_skeleton.global_transform * target_skeleton.get_bone_global_pose(b.get_bone_id()) 
var bone_pos :=  skeleton.global_transform *  skeleton.get_bone_global_pose(b.get_bone_id())

Look at the difference between the origins of the two basis I get there and done.

Now it seems that the physical skeleton’s get_bone_global_bose does not get updated (it is always the rest value). Is there a straightforward way to get this or do I have to make a whole custom skeletonmodifier3d?

Thank you and nice work on the release!

1 Like

After a fair bit of investigation…

You need to recreate the whole physical rig, connect to the PhysicalBoneSimulator3D’s ‘modification processed’ signal, save all the poses in that signal handler, and then use the saved poses to do active ragdoll stuff. Even after all that my physics is behaving quite a bit differently, I’m not sure why, but I would recommend that active ragdoll games stick with 4.2 for now.

3 Likes