Example #1
0
        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;
            }
        }
Example #2
0
        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;
        }