private void ApplyForces() { locAngVeloY = Localize(Body.angularVelocity).y; int n = 0, i = 0; for (; i < sensors.Length; i++) { Transform s = sensors[i]; Vector3 pos = s.position; Vector3 fwd = s.forward; if (Physics.Raycast(pos, fwd, out RaycastHit hit, rayLength, mask)) { float zTilt = locAngVeloY * Mathf.Sign(s.localPosition.x); float error = Mathf.Max(0, distance - hit.distance - zTilt * tilt); Body.AddForceAtPosition(fwd * -error, pos, ForceMode.VelocityChange); n++; } } Body.AddRelativeForce(Vector3.forward * Throttle * crntThrottle); Body.AddRelativeForce(Vector3.right * Steer * swerve); Body.AddRelativeTorque(Vector3.up * Steer * turn); IsOffTrack = n < minReqContacts; }