AssemblyLinearVelocity property of humanoid assembly does not inherit velocity of humanoid platform

Reproduction Steps

Create a moving platform, set network owner to server with BasePart:SetNetworkOwner(nil), click play, jump on platform, print out humanoid velocity with print(Character.HumanoidRootPart.AssemblyLinearVelocity.Magnitude).

In the below image the moving platform is network owned by the server and the character is networked owned by your client.

Expected Behavior

I expect the humanoid assembly velocity to include the velocity of the platform that’s moving it. This is how it behaves when you are the network owner of the platform.

Actual Behavior

If you are not the network owner of the platform you’re standing on, the velocity of the platform will not be included in the HumanoidRootPart.AssemblyLinearVelocity. If the velocity of the platform is 32, the velocity of the character will return 0 when you’re not walking. If you’re walking, only that velocity will show up.

If you are the network owner of the platform, the platform velocity will be included.

Issue Area: Engine
Issue Type: Other
Impact: High
Frequency: Constantly


Sorry for being late to this. We’ll take a look now.

This is currently expected with how the Humanoid works and I agree it isn’t ideal.
It’s also inconsistent with how a regular client-owned Part works too, where they do correctly inherit the server-owned platforms velocity.

This is solved in the new character controller.

We are still working on making it easier to opt-in to this system in a backwards compatible way, but you’re able to build new stuff with it now if you’d like.