Godot Version 4.6
I have a CharacterBody3D (CollisionShape3D is a CapsuleShape3D), which is on an AnimatableBody3D (rotating platform).
The CharacterBody3D is moving, but not rotating.
What to check?
Thanks
Mike
If you want it to rotate, you need to get vector between the center of the platform and the character and have the character face that every frame, modified by the original roation.
1 Like
mrcdk
March 30, 2026, 7:48am
3
There’s a bug where the character will slide off a rotating animatable body:
opened 01:24PM - 12 Feb 25 UTC
bug
confirmed
topic:physics
topic:3d
### Tested versions
Reproducible with v4.3.stable.official [77dcf97d8], tested … with both:
- Godot Jolt Version: 0.14.0 https://github.com/godot-jolt/godot-jolt
- Default GodotPhysics3D
- Reproducible with v4.4.stable.official [4c311cbee] using the now built-in Jolt physics.
### System information
Windows 10 - Godot v4.3.stable.official - Vulkan (Forward+) - dedicated NVIDIA GeForce RTX 2070 SUPER - AMD Ryzen 9 3900X
### Issue description
CharacterBody3D's follow moving AnimatableBody3D platforms with move_and_slide() in _physics_process, this works great.
No matter how fast you move the platform positionally it seems to stay completely in-sync.
However things start to go wrong when you **rotate** the AnimatableBody3D. The CharacterBody3D starts to slide off from the center of rotation.
The faster it rotates, the faster the character slides off.
Is there something within move_and_slide() that doesn't account properly for rotating bodies?
Here's a video of the issue:
https://github.com/user-attachments/assets/f5f47664-3c16-408a-adba-d87ebcc99006
(the floor is the moving/rotating AnimatableBody3D, the cube above is just something static for visual reference)
### Steps to reproduce
- Create a scene with an AnimatableBody3D floor + CharacterBody3D
- Ensure that the CharacterBody3D has minimal movement/gravity within _physics_process:
```
func _physics_process(delta: float) -> void:
if !is_on_floor():
velocity.y += get_gravity().y * delta
move_and_slide()
```
- Ensure that the CharacterBody3D is not located at the exact center of rotation, a sideways-offset of Vector3(0.1, 0, 0.1) will suffice
- Rotate the AnimatableBody3D via _physics_process:
```
func _physics_process(delta: float) -> void:
global_rotation_degrees.y += 50.00 * delta
```
- Add a camera, run the scene and wait until you see the CharacterBody3D slide off
### Minimal reproduction project (MRP)
This project contains what you see in the video preview above:
[CharacterBody3D_sliding_off_rotating_AnimatableBody3D.zip](https://github.com/user-attachments/files/18768303/CharacterBody3D_sliding_off_rotating_AnimatableBody3D.zip)
1 Like