Description

Issue seems to be related to NpRigidDynamic::setKinematicTarget.

When called by itself (like in the case of Kinematic bodies moved without teleportation), the simulated actor is woken and is put back to sleep in the next frame.

However, if NpRigidDynamic::setGlobalPose is used (either by itself or immediately after setKinematicTarget), the simulated actor is woken and does not put to sleep again until it has rested on the Kinematic actor and has elapsed its sleep threshold. This happens when the teleport flag is used (or if the object is marked as Static and the early out check is removed from UPrimitiveComponent::MoveComponentImpl).

As noted in the repro steps, this seems to only occur under certain play conditions (e.g. in PIE but not in "Standalone Game", "Launch", or Packaged Win64 builds).

Steps to Reproduce

1. Download and open the attached PhysSleep project (built with 4.14).
2. Open the editor and PIE.
3. Press T (or D-Pad left) to toggle the teleport tag to true.
4. Press Space Bar (or D-Pad down) to move the Kinematic actor.
5. Press T (or D-Pad left) to toggle the teleport tag to false.
6. Press Space Bar (or D-Pad down) to move the Kinematic actor.
7. Repeat steps 3 - 6 in "PIE", "Standalone Game", and in Packaged games.

Expected: After step 4 and step 6, once the kinematic actor is moved, the simulated actor should fall.

Actual: After step 4, the simulated actor falls. After step 6, the simulated actor "hangs" in the air (currently only observed in PIE).

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-34235 in the post.

0
Login to Vote

Fixed
ComponentUE - Simulation - Physics
Affects Versions4.124.13
Target Fix4.14
Fix Commit3141681
Release Commit3159180
CreatedAug 4, 2016
ResolvedSep 29, 2016
UpdatedApr 27, 2018