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); }
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); }
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); }