Releasing Character Physics Controllers

Do you plan on open-sourcing this?

Any Motor6D attached to the Character, having its CFrame Properties set consistently, causes the Character to spaz/fling.

(because of this I have to disable a lot of features that manipulate Motor6D Cframes on the Character.
Such as momentum based leaning, or Left and Right Torso Leaning, or Items attached to the Characterā€™s Body with Motors, swaying on movement.)

Wish I could post a bug-report, but Roblox makes that pretty difficult/impossible.

2 Likes

Oh that could be why!

Was also noticing this, and doing exactly the same thing.

So far the physics controllers are very glitchy I wouldnā€™t recommend using them in an actual game. I really hope theyā€™re working on them, but so far itā€™s been quietā€¦

Iā€™m already too far into switching my framework to use the controllersā€¦ thereā€™s no turning backā€¦ lol
But the motor one is the biggest issue Iā€™ve found with using them.

@IISato @apenzijncoolenleuk1 I tried setting some Motor6D C0 and Transforms every RunService.Stepped and didnā€™t see any issues. Do you have a place file or video that could help us reproduce the issue?

1 Like

First Video attached is with the Motor C0 effects active:
(In parallel I am calculating the CFrames in PostSimulation (Heartbeat) )
(in serial I am setting the Motor.C0 and C1 and Transform CFrames in PreSimulation (Stepped) )

In my testing, it seems to be dependent on the Animations being played, how fast youā€™re moving or how close to the ground you are. As you can see it only spazes it out when I crawl. And in First Person, it spazes out when crouching first.
Seems to be when a Motorā€™s CurrentAngle property is not still during a certain animation with the controller, it will spaz.

Motor Effects On

=========================================

Second Video Attached here is when I turn all the Motor CFraming Effects Off. No Spazzing.

Motor Effects Off

I can also consistently replicate this behavior everytime I crawl or go into first person in my game with Motors being set.

1 Like

Iā€™ve been having issues with disabling and re-enabling Motor6Ds in the character with the physics controllers. I canā€™t get it to reproduce consistently, so I will just explain the process. When I make my characters ragdoll, I disable/enable the Motor6Ds with something like the code shown below:

local character = workspace.Rig
local parts = {"Head","UpperTorso","RightUpperArm","LeftUpperArm","LeftUpperLeg","RightUpperLeg"} 
for i,v in pairs(parts) do
  character[v]:FindFirstChildWhichIsA("Motor6D").Enabled = false --or true
end

So, Iā€™ve found that sometimes when I

  1. Disable the Motor6Ds
  2. Set ControllerManager.ActiveController = nil from GroundController (I have also encountered the issue when setting the ActiveController to nil before disabling the Motor6Ds, so I do not think that is a fix)
  3. Enable the Motor6Ds
  4. Set ControllerManager.ActiveController = GroundController

The ControllerManager seems to break. The ActiveController will be the GroundController, but the GroundController itself will be stuck on GroundController.Active = false (which means the character will be stuck on the floor, the GroundOffset will not be applied, and moving/turning does not work). Aside from the ActiveController being inactive, everything else looks normal. The ground sensor is properly sensing the floor, Motor6D.Active = true, etc. The only way Iā€™ve found to fix this is to turn off the motors, wait a frame, and then turn them back on, so I assume it is some weird issue with the character assembly, but Iā€™m not sure why that would affect the ControllerManager since it only knows about the root part.

Edit: It seems like sometimes a controller will also get stuck on Active=true, even if it is not selected as the ActiveController. However, it still does not do anything, and the character will just lay on the ground and no forces will be applied to make the character upright or offset the character from the ground.

2 Likes

can i change the collision?, and how?

1 Like

Are there more fixes coming for GroundController turning?

It seems a few people are having a similar issue in this thread, where allowing an assembly to turn quick will cause it to overshoot the target then overshoot the target again, and again, and again until finally reaching and stopping at the destination.

The only solution I have found is keep BaseTurnSpeed and TurnSpeedFactor to a very low .5 or .75 value each, this way you slightly overshoot the target rotation.

My use case only has the ControllerManager, GroundController, and a sensor for floor.

Will we see improvements to the networking? Iā€™m noticing high network receives with many ControllerManagers active, all of which are owned by the server since theyā€™ll eventually be enemies that follow and attack the player. I like using all the new controllers for them since it gives me easy control over their movement and the server only sees 2 parts per entity (capsule collider + root part) and I let the client handle the visual display of the model.

With 50 of these entities + the player (total 51 ControllerManagers active), Iā€™m seeing pretty high network receive rates. From my testing, each individual ControllerManager is responsible for 2-4 kbps when moving. I wouldā€™ve expected better performance in this regard since 50 players is a decent size for larger Roblox servers and if this is to eventually replace Humanoid movement, the network receive rates are a bit too high for my use case.

7 Likes

Iā€™m somehow experiencing more ground controller stability issues now. Noticing a slight tilt after movement, no matter how much I increment balance speed and max torque. This does not happen with balance rigidity enabled.

Edit: Appears to be fixed.

2 Likes

Why canā€™t we rotate the player on Y axis. So we could make them be sideways and upsidedown and all in between?

this is coming really soon, iā€™ve managed to implement it myself already but updirection is being added to the controllermanager soon

2 Likes

Did a little more testing and it really just seems to be the replication of ControllerManager.MovingDirection and ControllerManager.FacingDirection since it changes so much to follow the player and avoid one another.

Is there plans to somehow reduce this load or should I figure out a custom solution to replicate this data?

1 Like

How did you do this, could I possibly have a copy of the place file, Im quite stuck on how I can implement a jump involving the new controllermanager, because everytime I jump the momentum of the character completely screws up.

(custom jump using apply impulse, it seems my character has some wierd physics interaction and spins in different directions whenever I jump).

1 Like

How do I get respawning to work? How do I detect if the humanoid is dead?

1 Like

on the server, connect to the humanoidā€™s Health property via Instance:GetPropertyChangedSignal() and for detecting when the character falls out of the world, use the DescendantRemoving signal on the playerā€™s character and check if whateverā€™s being removed is a meshpart, the rootpart or a motor6d

1 Like

Perfect! I used a local script instead of a server script though to detect but ran it through a remoteEvent. Kind of hacky, but it works.

2 Likes

Is it possible to add a raycast params type feature to the part sensors. I have cases where I donā€™t want the sensors to pick up certain parts that I canā€™t turn off CanQuery on. Ex: Mech picking up a character under it causing it to lift off the ground.

you kinda can to a degree, if you set a controllerpartsensorā€™s UpdateType to Manual then you can program it yourself; itā€™d be really nice to just be able to throw in raycastparams though

1 Like