Quick answer: The platform must be an AnimatableBody3D with sync_to_physics on; the character must have platform_floor_layers matching the platform’s layer and call move_and_slide each physics step.
A character stands on an elevator that rises — the character stays put and the platform slides out from under their feet. CharacterBody3D’s platform-following needs all three pieces aligned.
Platform Side
Use an AnimatableBody3D (not StaticBody3D, not RigidBody3D). Enable sync_to_physics = true so its velocity is reported to characters standing on it. Move it via its transform or an AnimationPlayer.
Character Side
platform_floor_layers = 0xFFFFFFFF # or match your platform's layer
platform_on_leave = CharacterBody3D.PLATFORM_ON_LEAVE_ADD_VELOCITY
func _physics_process(delta):
velocity.y -= gravity * delta
move_and_slide()
platform_floor_layers tells the character which physics layers count as “carry me” floors. Match the platform’s collision_layer to that mask.
The Magic Is in move_and_slide
move_and_slide reads the platform’s velocity from its AnimatableBody3D and adds it to the character’s motion this step. Skip move_and_slide (move the character manually) and you lose the carry.
Leave Behavior
Jumping off a moving platform should preserve its momentum (PLATFORM_ON_LEAVE_ADD_VELOCITY). The other modes drop or add only upward component — pick what feels right.
Verifying
The character rides an elevator up and down, walks along a horizontally-moving platform, and jumps off with realistic momentum. No sliding off.
“AnimatableBody3D + sync_to_physics + matching platform_floor_layers + move_and_slide. The carry is the sum of all four.”
Most ‘platform doesn’t carry me’ reports trace back to using StaticBody3D — AnimatableBody3D is the right type for anything that moves but isn’t a RigidBody.