How to Actually Use Roblox's Physics Character Controllers

You can increase the jump height by increasing the Y value of the jumpImpulse Vector3.

In this part of the code:

local function doJump(actionName, inputState)
    if actionName == "JUMP_ACTION" and inputState == Enum.UserInputState.Begin and humanoid:GetState() ~= Enum.HumanoidStateType.Ragdoll then
        local jumpImpulse = Vector3.new(0, 750, 0) -- Y is jump power. Change as you see fit.  

        controllerManager.RootPart:ApplyImpulse(jumpImpulse)
        
        humanoid:ChangeState(Enum.HumanoidStateType.Jumping) 
        
        local floor = controllerManager.GroundSensor.SensedPart
        if floor then -- Character's on the floor?  
            floor:ApplyImpulseAtPosition(-jumpImpulse, controllerManager.GroundSensor.HitNormal) -- Equal and opposite force  
        end
    end
end

The relevant part would be:

local jumpImpulse = Vector3.new(0, 750, 0)

This is where the jump force is being applied.

1 Like

How about swimming? how do i activate swimming functionality

Hello, good tutorial.

Have you made any reliable methods for the “Landed” HumanoidStateType to work when character actually has landed, if yes would you mind sharing?

1 Like

Hello! When I was coding landing animations for my game, I used Humanoid.StateChanged. In particular, I checked for when the oldState was Freefall and the newState was Running. Then I simply changed the state to Landed.

Wonderful tutorial! I haven’t found alot like this in a while. I was just wondering:

Somebody already said how to detect player deaths and such previously on this thread. How can I respawn the player and stop the player from moving/controlling the character after death?

Made a full game which was only possible if this topic existed.

1 Like

You can do that by using the asset in roblox’s topic.

Now this is crazy impressive! Glad this topic was helpful

1 Like

One hundred likes! :face_holding_back_tears: Thanks for all of the support

Has something changed with roblox’s character controllers? The file doesn’t seem to work anymore as my character just half clips to the ground and isn’t able to move. The character can jump and then move but it’s not what I’m looking for. I tried re-installing the file but to no avail I got the same results.
Is anyone else also experiencing this?
image

Yeah me 2 they seemed to have broken them my game doesn’t use humanoids but uses the controllers and it was working before especially annoying for me because my game requires them.

cc @voidguyDev Posted bug report, this previously worked.

I had that problem, my solution was to put the PartSensor’ parent in the HumanoidRootPart

1 Like

That works! Thanks a little annoying we have to do that though and nothing was said about the change hopefully it gets reverted.

since someone else tested before me and said it works I’ll try it out for myself too.
As of my now my “fix” was to just to use the scripts given from the introduction post of character controller and edit them myself.

I suppose the reason for that change is how SensorUpdateType works in OnRead mode, since that mode requires a BasePart to detect objects. However, in Manual mode, that’s not necessary. So, I agree with you.

for some reason, my character just ragdolls itself whenever it hits a wall at a fast speed. any help?

EDIT: the character only seems to do this when you jump right after slamming into a wall. still stumped.

Make sure BalanceRegidityEnabled is set to true for both AirController and GroundController.

Hi, thanks for the reply :smiley: The issue seemed to have resolved itself. P.S. BalanceRigidityEnabled was true for both, so I’m not sure what the problem actually was.