PhysicsSteppedMethod behaviour is the same regardless of setting

Looks like there is a lot of history here so I’m going to attempt to summarize the issues you are seeing. Please correct me if I miss any or misunderstand what is going on:

  1. Platforms are no longer “reactive” regardless of PhysicsSteppingMethod and are no longer displaying any “droop” due to their own weight.
  2. The BodyPosition force now “feels” too high, causing the character to become stuck when using a BodyPosition constraint to hold the character in place.
  3. The BodyPosition max force is unpredictable and varies based on movement direction, distance, etc.
  4. The BodyPosition force property appears to be inconsistent, with the same forces leading to different behavior when levitating a block.

For the first two, the problems are interrelated and both are caused by a bug in the original BodyPosition implementation. When computing the force that the BodyPosition should apply in order to reach the target position, the original implementation was using an out-dated velocity which caused it to under-estimate the required force in some cases. As you have seen, the result of this bug is relatively subtle when we are simulating at 240 Hz (which is the timestep we use for our simulation when using the Fixed Stepping method), leading to pretty plausible looking behavior with a little bit of “give” caused by the lagged velocity. For larger timesteps (which can be used when stepping is set to Adaptive), this bug introduces larger behavior changes. As part of addressing this issue, we ultimately fixed this original bug. The fixed implementation is now consistent with every other constraint and is more stable for different values of external forces, gravity and timestep.

For the third issue, I am seeing the direction dependent behavior you report and I think it might relate to the way BodyPosition specifies its MaxForce. The MaxForce is per-component and specified in WorldSpace, meaning the magnitude of the overall force can be larger than any of the specified components if the force is not aligned with one of the World axes. You might try an AlignPosition with the ForceLimitMode set to Magnitude. The resulting force should have a magnitude that is closer to the specified value. For this issue, we may also be seeing a bad interaction between the constraint and the legacy humanoid, so you might want to take a look at the new physics-based character controller and see if that gives more intuitive behavior.

Finally, the last issue looks like a sleep issue to me. It seems like there are some force values that should be sufficient to lift the part but aren’t sufficient to wake it up, causing it to stay stuck. I’ll follow up with members of the team that know this system better to see if there are any improvements we can make.

Let me know if I missed anything or if any of these suggestions work for you. Thanks.