Releasing Character Physics Controllers

i bloody hope so, i’ve been waiting far too long for this

2 Likes

I think I got it figured out, although still need to clamp the movement velocity and adjust other things. Had to add a custom hitbox which sucks and makes friction act really strange. God I hope they figure out what they want to do with controller because it’s pretty painful to use to its full extent.

5 Likes

So does this mean that server physics be less choppy

how do you get access to the LuaCharacterController?

https://devforum.roblox.com/t/i-spot-a-luacharactercontroller-actor-characters-character-abilities-and-footplanter/3074054

FFlagLuaCharacterControllerBetaFeature

great ty! ive been waiting for the ability to customize the character controller for a long time. im currently trying to make an implementation that mimics vanilla behavior but im uncertain about some things due to the documentations being incorrect/outdated

Yes, when I jump and rotate in the air, it’s not like the vanilla ones.

I’d really love to see a “TurnRigidityEnabled” added, basically making the turning act more like the default character controller as for example when turning on slippery surfaces you overshoot the facing direction, the amount you overshoot also changing based on how slippery the surface is.
This is especially annoying if you want to make a precise controller which needs the physics potential of the ControllerManager.

4 Likes

I’m able to replicate a similar issue with an AlignOrientation parented to the HRP of a humanoid NPC that’s constantly looking at their target. For some reason, either the NPC will fling itself/fling the player or begin wobbling around. The only solution tot his is to set BalanceRigidity to enabled but it will still fling you or itself whenever you run into it.
Additionally, I also encounter that the server forcefully steals NetworkOwnership from the player’s character whenever the NPC touches them and I believe that may be related to this issue

The only part that has mass and collisions is the HRP. Turning off AlignOrientation appears to fix the issue. I will attempt to make the NPC look at targets on the client which may fix the physics-related issues but I have a feeling it will cause nothing but more issues in the future.

Relevant code, ignore how this horrible loop is structured; it’s essential for other things not to break or desync (This is a sophisitcated A* pathfinding unit)


	local dt = RunService.Heartbeat:Wait()
		while dt do
			if ded or not script.Enabled then break end

			
local align = boss.HumanoidRootPart:FindFirstChild("ThisIsYourFault") or Instance.new("AlignOrientation") 
	align.Name = "ThisIsYourFault"
	align.Enabled = true

	align.Attachment0 = boss.HumanoidRootPart.RootAttachment
	align.RigidityEnabled = true
	align.Parent = boss.HumanoidRootPart

---

			if currentTarget and currentTarget.root and currentTarget.root:FindFirstChild("RootAttachment") then
				align.Enabled = (currentTarget ~= nil and .currentTarget ~= "nil" and behaviour == "hostile")
				local distance = (currentTarget.root.Position - rootPart.Position).Magnitude
				align.Attachment1 = currentTarget.root.RootAttachment
				align.Attachment1.WorldCFrame = CFrame.new(
					boss.HumanoidRootPart.Position, 
					Vector3.new(currentTarget.root.Position.X,boss.HumanoidRootPart.Position.Y,currentTarget.root.Position.Z)
				)
			else
				align.Enabled = false
			end
dt = RunService.Heartbeat:Wait()
end
4 Likes

actual tragedy. we’re nearing 1 year on this property being added but never going live!

1 Like

Engine changes are never a guarantee to be seen by the public.

I think what hurts the most is that it’s in the docs and it’s writeable, but doesn’t seem to actually connect to anything :confused:

Will there be an option to change how fast the controller aligns to the floor sensor? I can’t seem to change the speed currently and just collides with the ground when walking up slopes quickly.

1 Like

another way:

-- modified running connection
controllerManager:GetPropertyChangedSignal("MovingDirection"):Connect(function()
	local activeController = controller.ActiveController
	if activeController:IsA("GroundController") then
		local speed = controllerManager.MovingDirection.Magnitude * controllerManager.BaseMoveSpeed
		onRunning(speed)
	end
end))
1 Like

@kleptonaut Any news on this, a lot of people seemed to enjoy this and have been waiting for new features like the UpVector feature to be enabled.

1 Like

Hello devs!
First I’ll apologize for the delay and lack of updates, priorities had shifted around over the last year, which delayed progress.

However, I’m happy to share that you can now use the ControllerManager.UpDirection property. This will set a target for the Up axis of the RootPart. It can be used to change the orientation of a character beyond just the facing direction. For example, you continuously set UpDirection to match the GroundSensor.HitNormal, you could have a character always stand perpendicular to the surface its standing on.

Please report any issues as bug reports on the forum.
We hope to continue working on characters in the future. Thank you for your patience!

25 Likes

Woohoo! Hope to see the future of character physics controllers moving forward.

2 Likes

Hey there, been trying to recreate the built-in controller for my own projects, so I thought i’d share some of the progress I made in here since some people seem to be struggling with it:

Character Controller.rbxl (146.4 KB)

  • All the basic Humanoid states should in theory work the same if I didn’t miss anything.
  • JumpHeight/Power should be more consistent than in the provided example.
  • Health should replicate (and it should be easy to replicate the character’s properties).
  • There’s a ragdoll on death to showcase the new avatar joint upgrade.
  • I’ve tried to recreate the upcoming footplanting (credit to dthecoolest for their ik resource), and i’ve added some neat directional/torso tilting based on AW’s to accompany it (the leg tilting should disable itself if the player has strafing animations).
  • I added a character type, because i’m tired of having to spam WaitForChild when referencing it’s descendants, the autocompletion is also nice.

Known issues:

  • Collision on stairs when going downwards isn’t great, a capsule shape would fix it but I’d rather stay faithful to the character’s shape.
  • Footplanting ain’t perfect because for all I know the built-in one could come out tomorrow, so I didn’t bother.
  • The animate script is buggy, and doesn’t support horizontal climbing, but these are issues with the controller itself i’m hoping get fixed (i’ve edited the animate script in the example to address the climbing thing, but I can’t do much about it bugging out).
3 Likes

Will there ever be an Enabled property added to ControllerManager or ControllerBase in the near future? I am making a physics based game which includes the ability to ragdoll, however, there doesn’t seem a proper way to disable the manager nor its controllers.

Without any form of disabling, the player is still able to control their character while in a ragdolled state, which is something I don’t want. The closest form of disabling everything would be clearing the RootPart property, however, it seems a little weird doing it through that method.

1 Like

Currently the best way to disable is by setting ControllerManager.ActiveController to nil. I understand its not super clear, so maybe a redundant Enabled property would be worth it.

4 Likes