New Humanoid Physics Controller - Beta

Controller Beta Update - v0.2

Hello developers! I again want to thank everyone for their feedback and bug reports. It’s very important to us and we’ll continue to take everything into account so this system is perfect.

Here’s some changes that we enabled today that address some of your concerns:

  • Deleting a Controller while running no longer results in crash
  • Turning towards your FacingDirection now always rotates with the shortest distance rather than sometimes rotating over 180 degrees.
  • GroundController now decelerates from your current speed rather than the top speed. This should address everyone’s running acceleration/deceleration concerns.
  • The AirController.VectorForce value on the default JumpController should now better match the behavior with Humanoid.JumpPower.
    • We still do not have support for configuring your jump height. As a workaround, you can view conversions between JumpPower and JumpHeight values based on your gravity setting from Game Settings > World.
  • Increased internal friction limits so walking up very steep slopes is possible (like on the old controller)
    • This unfortunately caused a new bug where tipping over from running into a wall is significantly easier. You can work around this by setting RigidityEnabled = true on the RunningController. Alternatively you can lower Friction.

Also, here’s a list of existing known issues and requests that are being worked on now:

  • The aforementioned tipping over bug. We are also looking into how to make this more stable and customizable. This should also address issues
  • Adding the ability to disable linear and angular momentum preservation in the air independently.
  • Issues related to particular constraint combinations used in combination with the new controller.
  • Fixing buggy stair climbing and swimming.
10 Likes

Seems like a great update! But i have a question many have also been wondering, will this be for r6 too, and will we be able to disable/enable it?

This has been outlined a few times already.
It’s for all characters, the rig type is irrelevant. It will eventually replace the existing controller, no option.

6 Likes

For compatibility with older systems, will the controller respond to changes in Humanoid.WalkSpeed, Humanoid.JumpPower, and other properties?

2 Likes

What about the obbying community? Will the new controller on full release use almost the same physics as the legacy controller?

We are looking into it. There’s a couple issues with having a property set on one instance set the property on another, but we’ll find some way so that old games won’t need to change.
For new work, I’d recommend getting comfortable setting ControllerManager.BaseMoveSpeed and AirController.VectorForce instead.

The entire purpose of having a Beta and opt-in period is so we can gather feedback to make the new controller meet all the same behaviors the old one had.

2 Likes

for something in beta, it has pre-alpha bugs. It’s unusable and untested. Constant flinging and tripping. This would be so much better if it were actually stable.

1 Like


I love this

all jokes aside this is an incredible update! hopefully will get an R6 port or update but I can see this changing alot of games really well :0

13 Likes

I just discovered a crash, I don’t know if the crash is about this or not. When I was trying to play with physics with the new Humanoid Physics Controller.
When I fell in studio but when got up with shift lock in studio, I crashed

Please read the latest update notes:

If you are still running into the issue you’re describing, please describe the bug in detail so it can be addressed.

1 Like

Since there’s a new update to this, I think I should report a couple oddities I’ve noticed when trying it out. Like before, I’ll be comparing it to PhysicsCharacterController, which I kinda hope this becomes the official counterpart to.

First, acceleration feels like it’s only an illusion in the new humanoid controller; If I go forward and backward as I accelerate, my character somehow maintains their speed and manages to reach full speed. In PhysicsCharacterController, I naturally can’t make it to full running speed by doing this.

This feels like as if a developer used the classic movement and gradually increased the player’s WalkSpeed as they held any movement key, which would probably result in the same “fake momentum” feelng.


If I briefly press a different direction before releasing all movement keys, my character decelerates in that new direction instead of the one it’s been running in for longer. This is most easily seen on the last run in the “Roblox” part of this video, where my character completely turns around, and somehow proceeds to slow down that way.

In PhysicsCharacterController, doing this barely affects the player’s movement direction; You can tell what direction I last pressed because I turn to that direction, but notice how I still decelerate in the direction that’s built up the most momentum, which makes sense.


If I get a running start, jump, hold the opposite direction while jumping, then release that before I land, it causes an unnatural change of movement; My character starts going backward during the jump, but somehow instantly decelerates in the last direction they moved when on the ground.

In PhysicsCharacterController, this kinda happens, but it feels more physically-sound and accurate compared to the new controller.


Lastly, it seems that the new character controller immediately sets the Humanoid’s Running speed to 0 as soon as deceleration begins; My character plays a “braking” animation when her speed starts dropping rapidly, but here, they immediately switch to their idle animation. In PhysicsCharacterController, the braking animation plays as expected.

Interestingly, with the classic Roblox movement, the braking animation does play, so the new controller system has to be setting it directly to 0 or something.

Oh, and another thing: I know it’s a user-made module so it’s not anything official, but @TheNexusAvenger’s Nexus VR Character Model isn’t compatible with the new controller; If it’s enabled, trying to move makes the camera swing around and pulls me towards the +Z axis.

I hope this new controller isn’t truly going to replace the classic system, as Nexus VR relies on it, and I’d like my experience to support immersive VR that goes beyond Roblox’s built-in VR where you can’t move your character’s arms.

6 Likes

Was just about to report on all of the oddities you’ve recorded here. It seems like the velocity is just a value that is being applied directly to the input direction regardless of whatever direction the character was previously moving in.

1 Like

Thanks again for trying it out and the detailed feedback. All your examples make sense and I’ll make sure these cases are working in a physically sound way.

Your last point about the deceleration animations and Running speed signals is a known issue. We want to provide a way to differentiate between deceleration from DecelerationTime, and deceleration from sliding (friction), as it’s possible you’d want different animations between these cases.

Also, while we aren’t there yet, we’ll definitely have VR support.

4 Likes

This controller is ridiculously unstable.

Making a simple platformer demo that uses some extra quirks such as using external forces (such as alignorientation, bodyvelocity, etc) would cause it to spaz out even more than it already does. removing the constraint and forces didn’t quite help out with making it less prone to getting sent of the map to where sometimes its at NaN

1 Like

Some random weird flaws from memory:
Objects are too slippery and sometimes you randomly start sliding or losing control when on unanchored objects.
External forces cause you to be flung.
I’ve experienced someone when jumping out of a seat in a plane, I get sent to the Null zone except, the last stage of the null zone where Roblox gives up and your screen flashes black and sky.
Walking in circles with a tool causes you to trip or wobble.
I’m able to climb upside-down on some unanchored surfaces.
Climbing on non-truss parts is finicky and you spam between a state of climbing and not-climbing.
The air momentum doesn’t work on parts that are rotating as opposed to regularly moving, this one is minor.
You can simply start sliding off moving objects which the old Humanoid did not do. Also, the character sometimes randomly jumps.
Jumping off a moving part that is relatively loose can cause that part to have extreme amounts of velocity applied downward to it.
Walking on a stationary but unanchored large structure (mesh) can cause your character to suddenly tilt everywhere.
Getting in seats is 10x harder.
Air momentum can be incorrectly calculated if the part the character was previously on starts to erratically move, causing the character to just fly around as if they were welded to it.
Edit2: I can go up a truss really fast if it’s unanchored and still by holding the spacebar whilst climbing.
EDIT: This was all experienced in one game, but I don’t want to give it out publicly.
I can’t wait for the new Strafing and Humanoid Physics controller to finally come out.

2 Likes

There’s also another bug where the Humanoid can’t jump off the edges of any part, just wanted to point that out.

They must’ve accidently deleted the Coyote Line causing that to happen.

3 Likes

Found a Bug where, on a custom R15-based rig the Controller won’t fire Humanoid .Running when walking, but it would on transitions alike to Jumping and Falling.

This Rig’s .Running event works normally with the Current System, so i must assume it’s something related to the Controller.

Running into a wall will fling the character when the HumanoidRootPart’s CFrame is being set constantly:
robloxapp-20221118-2131484.wmv (3.6 MB)

1 Like

Controller Beta Update - v0.3

What a year! We have another set of Controller updates and fixes releasing today that address more of your bugs and feedback.

  • AirController.CancelAirMomenum replaced with AirController.MaintainLinearMomentum and AirController.MaintainAngularMomenum to allow you to separately toggle whether you keep your angular and/or linear momentum when transitioning to this Controller.
  • ControllerManager input properties now replicate from client to server, so the player will maintain control of their character if it becomes owned by the server.
  • Using certain Constraints with the Controllers no longer causes the character to explode. (thanks @MikesDSL)
  • Character no longer maintains their pre-jump ground speed after freefalling and changing direction in the air. (thanks @JoyfulFlowerMary)
  • General stability improvements to the GroundController. Character no longer tips over when running into walls. We encourage you to disable RigidityEnabled again and experiment with balance torques!
  • Other small bug fixes for ControllerManager initialization.

Known Issues

  • There are still issues with GroundController acceleration/deceleration, such as being able to continue accelerating by running back and forth.
  • Certain stair configurations can still be a bit buggy.

Thanks again for feedback and keep it coming! This is the last update of the year, so see you next year!

18 Likes

Could you allow us to disable conserving momentum while not in the air or standing on moving objects as well? meaning that moving objects using physics would act the same as cframed objects when standing ontop of them.

With this developers would be able to create their own code to conserve momentum much easier, since right now if i would like to disable conserving momentum for physics parts, i would need to use “hacky” methods, which would be solved with the ability to disable momentum conservation completely for physics based moving objects.

4 Likes