The character should jump upwards only, causing the tail attached to the humanoid root part to follow physically. The character should not be moved significantly in any other direction.
I have various characters with ballsocket tails that work fine. Only this one (the red snake/bug) misbehaves like this. I cannot figure out why.
Actual Behavior
The character will boost forwards unnaturally when the tip of the tail touches the ground.
Shortening the tail does not help except to make it less likely that the tip of the tail will touch the ground.
Adjusting the material properties does not help as far as I’ve seen.
Adjusting the root priority of the rootpart does not help.
Toggling various properties related to physical behavior does not seem to help.
Workaround
There is NO workaround for this that I’ve found. This is blocking me from releasing a new character in my game.
Issue Area: Engine Issue Type: Other Impact: High Frequency: Constantly Date First Experienced: 2022-08-01 00:08:00 (-05:00)
The physics team looked at the forces generated by jumping with the tail still touching the ground. These forces are the result of how jumping works and the complex mechanism that the long tail characters make up. This expected behavior for the physics system, adding additional constraints that restraint movement could help eliminate the unwanted behavior.
Thanks for the explanation. Do you think you could elaborate on what sort of constraints could be used to control this unwanted behavior, and how? It’s not immediately clear to me. Hoping you don’t you mean preventing the ballsocket constraints from allowing the tail to droop, as that’s quite undesirable.
There is no combination of constraints that will mitigate this behavior. Humanoids need to expose more properties to let us control bizarre behavior like this. I will need to reimplement jumping myself by platformstanding the humanoid and manually applying an impulse to the rootpart. This is awful.
Actually, I don’t like it, but this localscript appears to have ““solved”” the problem. Every time I try to do literally anything with Humanoids, I have to build a glass castle out of hacks. This is terrible to do and breaks so many assumptions. I have to proxy these parts with ObjectValues just so I can do character operations, and I have to add special cases for them absolutely everywhere.
Please just make humanoids predictable and configurable.
local tailModel = Instance.new("Model")
local partNames = {
"Tail1",
"Tail2",
"Tail3",
"Tail4",
"Tail5",
"Tail6",
"Tail7",
"Tail8",
"Tail9",
}
for _,partName in pairs(partNames) do
script.Parent:WaitForChild(partName).Parent = tailModel
end
tailModel.Parent = workspace.CurrentCamera -- YOLO
Given this combination of system (plant) and current humanoid controller the current behavior is correct for this combination. Meaning the solver is solving the dynamics correctly and the controller is doing what it can, which is unfortunately undesirable.
The new physics character will allow humanoids to be more configurable, which should allow one to obtain the desired results more easily.