When a character that has a ControllerManager
has its assembly velocity set to NaN (e.g. from zero division, getting the unit vector of a blank vector, physics errors, etc), the humanoid can’t recover in the same way that a regular humanoid normally can, and instead locks all sensors and locks the active controller with the server holding its network ownership. This is not an issue with Humanoid.EvaluateStateMachine
and is caused by the ControllerManager
itself.
After a while, if Workspace.StreamingEnabled
is true
and if Workspace.StreamingIntegrityMode
isn’t set to Disabled
, the player will get stuck in the gameplay paused state, fully softlocking the client. If Workspace.StreamOutBehavior
is set to Opportunistic
, the softlock occurs much more quickly and everything affected by streaming will completely unload.
Repro
- Enable
StreamingEnabled
if it isn’t on already - Set
Workspace.StreamingIntegrityMode
to anything butDisabled
andWorkspace.StreamOutBehavior
toOpportunistic
for “best” results - Set up a character with a ControllerManager with whatever configuration (
RootPart
andActiveController
must be set) - On the client, set the assembly’s linear or angular velocity to NaN (for example, run
game.Players.LocalPlayer.Character.HumanoidRootPart.AssemblyLinearVelocity /= 0
Demonstration
Normal behaviour (no ControllerManager)
Broken behaviour (with ControllerManager, StreamOutBehavior
: Opportunistic
, StreamingIntegrityMode
: PauseOutsideLoadedArea
)
Place files
With ControllerManager:
controllertest.rbxl (55.6 KB)
Place used for without controllermanager is a default baseplate