ArcadeCarPhysics icon indicating copy to clipboard operation
ArcadeCarPhysics copied to clipboard

Idle vehicles 'drift' backwards.

Open jackkrol opened this issue 1 year ago • 1 comments

Even with the Sandbox scene, I found an idle vehicle on flat terrain will always roll backwards. I traced it to line 1114:

1114 Vector3 wsDownDirection = transform.TransformDirection(Vector3.down);

Changing wsDownDirection from local down direction to global seems to solve the issue:

1114 Vector3 wsDownDirection = Vector3.down;

I found even when the axle offset y is the same for both rear and front wheels, sometimes the car doesn't align perfectly on the ground, so wsDownDirection doesn't perfectly align with global down, so the car is 'pushed' slightly backward. Any consequences to using Vector3.down?

jackkrol avatar Mar 05 '23 03:03 jackkrol

I think that using Vector3.down might lead to a non-orthogonal basis and hence odd results. The better way might be to "round" the down direction a bit to make it perfectly aligned and avoid floating point imprecision.

Something like that (not tested)

Vector3 dd = transform.TransformDirection(Vector3.down);
float mul = 1000.0;
wsDownDirection  = new Vector3(
           Mathf.Round(dd.x * mul) / mul),
           Mathf.Round(dd.y * mul) / mul),
           Mathf.Round(dd.z * mul) / mul));

SergeyMakeev avatar May 10 '23 20:05 SergeyMakeev