void FixedUpdate() { value = Mathf.Clamp01(value); float fs, fp, rs, rp; // If we have Ackerman steering, we apply torque based on the steering radius of each wheel var radii = AckermannUtils.GetRadii(ackermann.Angle, ackermann.AxleSeparation, ackermann.AxleWidth); var total = radii[0] + radii[1] + radii[2] + radii[3]; fp = radii[0] / total; fs = radii[1] / total; rp = radii[2] / total; rs = radii[3] / total; if (ackermann.Angle > 0) { ackermann.FrontRightWheel.BrakeTorque = value * maxTorque * fp; ackermann.FrontLeftWheel.BrakeTorque = value * maxTorque * fs; ackermann.RearRightWheel.BrakeTorque = value * maxTorque * rp; ackermann.RearLeftWheel.BrakeTorque = value * maxTorque * rs; } else { ackermann.FrontLeftWheel.BrakeTorque = value * maxTorque * fp; ackermann.FrontRightWheel.BrakeTorque = value * maxTorque * fs; ackermann.RearLeftWheel.BrakeTorque = value * maxTorque * rp; ackermann.RearRightWheel.BrakeTorque = value * maxTorque * rs; } }
void Update() { var farAngle = AckermannUtils.GetSecondaryAngle(angle, AxleSeparation, AxleWidth); // The rear wheels are always at 0 steer in Ackermann m_RearLeft.steerAngle = m_RearRight.steerAngle = 0; if (Mathf.Approximately(angle, 0)) { m_FrontRight.steerAngle = m_FrontLeft.steerAngle = 0; } m_FrontLeft.steerAngle = angle; m_FrontRight.steerAngle = farAngle; }