i bloody hope so, i’ve been waiting far too long for this
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.
So does this mean that server physics be less choppy
how do you get access to the LuaCharacterController?
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.
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
actual tragedy. we’re nearing 1 year on this property being added but never going live!
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
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.
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))
@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.
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!
Woohoo! Hope to see the future of character physics controllers moving forward.
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).
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.
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.