How do I fix NPCs falling down when colliding with players after they spawn?

I currently have a problem with NPCs in my game. Nearly everytime I set the parent of an NPC in my game to the workspace and I collide with the NPC after it gets parented to the workspace, it falls down.

Here is a gif of what I mean: https://gyazo.com/65ca208e83a2e8b3eaab1d3362797056

Typically after a couple seconds after the NPC is parented into the workspace, it doesn’t fall down from player collisions as often.

I’ve tried turning up the density of the HumanoidRootPart of the NPC, setting all of the HumanoidStates to false, and a lot of other things but I cant really seem to find a solution to this problem.

I managed to fix this temporarily by parenting the NPCs to the workspace and positioning them in an area where players can’t see them and then positioning them to the desired position after a few seconds. This is a pretty hacky solution but I’ll probably be using this solution until I find something less hacky.

Have you tried Anchoring? To move you would need to set position with CFrames but it should remove physics interactions with players.

Check the HipHeight on the humanoid. Is it accurate? I think it’s 2.815 for the standard character, so make sure it’s the same on your NPC. You can modify the hip height through a script, but it might interfere with the humanoid’s automatic scaling, which I imagine is the cause of your issue in the first place. So if just setting the hip height doesn’t work, try disabling Humanoid.AutomaticScalingEnabled, and then set it.

You could use physics service and set the enemies and players into the same collision group then set it where it can’t collide with the other parts in the collision group.

This doesn’t seem like a very ideal solution for me. I don’t want to script a whole other system for NPC movement and integrate walking animations for it.

The HipHeight on the humanoid is accurate and using your method didn’t fix the problem.

I want NPCs and players to collide with each other.

It’s a shame the body gyro turns off with player interaction. Maybe a rapid uprighting script?

Adjust CustomPhysicalProperties, maybe making them heavier will do the job.

I somehow managed to fix my issue by enabling/disabling these HumanoidStates:

--
humanoid:SetStateEnabled(Enum.HumanoidStateType.Climbing, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.FallingDown, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Flying, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Freefall, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Swimming, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.PlatformStanding, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Landed, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Jumping, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Ragdoll, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.GettingUp, false)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Seated, false)

humanoid:SetStateEnabled(Enum.HumanoidStateType.Dead, true)
humanoid:SetStateEnabled(Enum.HumanoidStateType.Running, true)
humanoid:SetStateEnabled(Enum.HumanoidStateType.RunningNoPhysics, true)
--
3 Likes