ArcadeCarPhysics
ArcadeCarPhysics copied to clipboard
Idle vehicles 'drift' backwards.
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?
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));