コード例 #1
0
    static float GetTurnRadius(float speed)
    {
        float forwardSpeed = Mathf.Abs(speed);
        float turnRadius   = 0;

        var curvature = RoboUtils.Scale(0, 5, 0.0069f, 0.00398f, forwardSpeed);

        if (forwardSpeed >= 500 / 100)
        {
            curvature = RoboUtils.Scale(5, 10, 0.00398f, 0.00235f, forwardSpeed);
        }

        if (forwardSpeed >= 1000 / 100)
        {
            curvature = RoboUtils.Scale(10, 15, 0.00235f, 0.001375f, forwardSpeed);
        }

        if (forwardSpeed >= 1500 / 100)
        {
            curvature = RoboUtils.Scale(15, 17.5f, 0.001375f, 0.0011f, forwardSpeed);
        }

        if (forwardSpeed >= 1750 / 100)
        {
            curvature = RoboUtils.Scale(17.5f, 23, 0.0011f, 0.00088f, forwardSpeed);
        }

        turnRadius = 1 / (curvature * 100);
        return(turnRadius);
    }
コード例 #2
0
    private void FixedUpdate()
    {
        _speedMagnitude    = _rb.velocity.magnitude;
        _speedMagnitudeKmH = _speedMagnitude * 3.6f;

        var currentAlpha = RoboUtils.Scale(40, 100, 0, 1, _speedMagnitudeKmH);

        currentAlpha         = Mathf.Clamp(currentAlpha, 0, 1);
        _gradient.alphaKeys  = new GradientAlphaKey[] { new GradientAlphaKey(currentAlpha, 0), new GradientAlphaKey(0, 1) };
        _trail.colorGradient = _gradient;

        var maxTrailWidth = 0.6f;
        var minTrailWidth = 0.3f;
        var trailWidth    = RoboUtils.Scale(40, 80, minTrailWidth, maxTrailWidth, _speedMagnitudeKmH);

        _trail.startWidth = Mathf.Clamp(trailWidth, minTrailWidth, maxTrailWidth);
    }
コード例 #3
0
    static float GetForwardAcceleration(float speed)
    {
        // Replicates acceleration curve from RL, depends on current car forward velocity
        speed = Mathf.Abs(speed);
        float throttle = 0;

        if (speed > (1410 / 100))
        {
            throttle = 0;
        }
        else if (speed > (1400 / 100))
        {
            throttle = RoboUtils.Scale(14, 14.1f, 1.6f, 0, speed);
        }
        else if (speed <= (1400 / 100))
        {
            throttle = RoboUtils.Scale(0, 14, 16, 1.6f, speed);
        }

        return(throttle);
    }