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.
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?
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.
=========================================
Second Video Attached here is when I turn all the Motor CFraming Effects Off. No Spazzing.
I can also consistently replicate this behavior everytime I crawl or go into first person in my game with Motors being set.
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
- Disable the Motor6Ds
- 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) - Enable the Motor6Ds
- 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.
can i change the collision?, and how?
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.
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.
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
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?
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).
How do I get respawning to work? How do I detect if the humanoid is dead?
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
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.
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