We are working on an MMO game which uses unity physics simulate player moves on the client, and the server run the same simulation use PhysX to authorize clients moves. The client-side moves are predictions. When the client receives the authorized position from the server, it will compare the sever position with the buffered position when the client sent the move command to the server, if the distance of two positions is too big, the client will make a correction. Because the PhysX is not determinism, those two positions never equal, but hopefully the difference will be fairly small. When the player runs on a flat ground, the difference is small enough and stable(about 1e-8), but when the player moves toward a wall, the player will slide along the wall, then the difference of the two positions become larger and accumulates. We use CharacterController.Move(Vector3 motion) in unity, and on server we use virtual PxControllerCollisionFlags PxController::move ( const PxVec3 & disp, PxF32 minDist, PxF32 elapsedTime, const PxControllerFilters & filters, const PxObstacleContext * obstacles = NULL ) I think the minDist in PhysX's move function which unity does not expose may cause this difference. What's the value unity use in this function? And the collider in PhysX has a restOffset property, unity doesn't have this too, what's this value unity use? Finally, we use Unity 2017.2, is the PhysX's version 3.3.3?