Why must physics (PhysX) code be updated in FixedUpdate() and not in Update() ?
Because FixedUpdate() is called at the fixed time, when the physics are updating. Physics can be updated in Update(), but it’s not recommended.
To explain the reason: update is called at times independent of fixed update, as such it can be that override / change you did is immediately overriden by an ongoing physics update for example.
especially doing position updates on rigidbodies will go very wrong when doing this as the physical simulation will no longer be correct, leading to corresponding consequences.