[Updated] Perfect R6 Ragdoll - Easiest Ragdoll System for R6 Avatars

All the parts

character limit character limit

The ragdolling appears to be working, however it is nothing like what you showcased in the videos.


Is this an issue with collision or what?

Are you changing the state of the humanoid in any way?

Hey im having trouble with the Ragdoll,
image
When im knocking the dummy back and ragdolling it, it stays in the air for like 2 seconds then goes down, any solutions?.. Im not changing the humanoidstatetypes and Im using the npc version ( i didnt alter the script )

From any other scripts? I have not. I don’t change the humanoid state from any other scripts.

For anyone having problems with the NPC version of the script in 2024, I did 2 things and it works great for me now!

  1. In the function replaceJoints(), change this:
for _, motor: Motor6D in pairs(Character:GetDescendants()) do

to this:

for _, motor in ipairs(Torso:GetChildren()) do

For some reason it was only finding the RootJoint motor6D for me! This fixes that.

  1. In the function Ragdoll(value: boolean), change the Enum.HumanoidStateType.Ragdoll to Enum.HumanoidStateType.FallingDown, like this:
function Ragdoll(value: boolean)
	if value then
		Humanoid:ChangeState(Enum.HumanoidStateType.FallingDown)
		Humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, false)
		replaceJoints()
		push()
	else
		resetJoints()
		Humanoid:ChangeState(Enum.HumanoidStateType.GettingUp)
	end
end

Enum.HumanoidStateType.Ragdoll is deprecated now, and FallingDown works more consistently. Since it force disables the GettingUp state type, this makes NPCs fall down more consistently.
Hope this helps!

1 Like

omg thank you sooo much!! I was having the same problem.

1 Like

Awesome fix! I’ll update the NPC version with this change.

1 Like

For some reason the ragdoll quite weird for me :
image
image
image
Don’t know what could be causing this, all I did was convert the code to a module script.

anybody found a fix for this yet?

just set the network owner of all the bodyparts to the player when the character dies. Maybe that will fix it.

1 Like

Set one of the character’s bodyparts’s network ownership to the player after the boolvalue gets set to true once they die. I set the torso’s network ownership and it worked for me.

Anyways, good ragdoll system, I had a ragdoll on death script and I wanted to make it have temporary ragdoll, this saved me a lot of time.

Only problem I came across was that animations still played once you get non-death ragdolled, but I fixed it by just stopping all animations on the client when the player gets ragdolled. (although sometimes you might not have any animations when you get up from ragdoll until you walk, but that’s fine.)

I will add this to the script. Nice solution!

If it is a problem then you can just put Humanoid:StopAllAnimations() but you should not be playing animations after the character dies anyway.

Hi

Nice system, performant and barebones, as it should be

Been grappling with one physics issue for a while now. Was hoping maybe your experience working with ragdolls may provide clarity?

When the character is floating in water, I enable the ragdoll and make each assembly in the character anti-gravity by using a vectorforce with force set to AssemblyMass * workspace.Gravity. However, I noticed that when all these anti-gravity assemblies(the body parts of the character) are connected by the ball sockets, the character floats up when moving, which should not occur:

Do ball sockets exert a force? How can I ensure that the anti-gravity version of the ragdoll remains anti-gravity even when moving?

In the client script, comment out the push() function since it exerts a force when the ragdoll is activated.

Unfortunately, I have that commented out already

I’m pretty sure that the ball sockets somehow affect the velocity of the connected assemblies, unless, which I highly doubt, the ragdoll humanoid state exerts a constant upwards force.

In the createColliderPart() functon, try removing the rp.Massless = true line and see if that fixes it.

I already disabled that but the issue persists

try setting Humanoid.EvaluateStateMachine to false temporarily