summaryrefslogtreecommitdiffstats
path: root/scene/3d/skeleton_ik_3d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/3d/skeleton_ik_3d.cpp')
-rw-r--r--scene/3d/skeleton_ik_3d.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/scene/3d/skeleton_ik_3d.cpp b/scene/3d/skeleton_ik_3d.cpp
index 0d6316ee35..2476e7d5cd 100644
--- a/scene/3d/skeleton_ik_3d.cpp
+++ b/scene/3d/skeleton_ik_3d.cpp
@@ -503,7 +503,11 @@ Transform3D SkeletonIK3D::_get_target_transform() {
Node3D *target_node_override = cast_to<Node3D>(target_node_override_ref.get_validated_object());
if (target_node_override && target_node_override->is_inside_tree()) {
- return target_node_override->get_global_transform();
+ // Make sure to use the interpolated transform as target.
+ // When physics interpolation is off this will pass through to get_global_transform().
+ // When using interpolation, ensure that the target matches the interpolated visual position
+ // of the target when updating the IK each frame.
+ return target_node_override->get_global_transform_interpolated();
} else {
return target;
}