public void Update() { if (surface == RoadSurface.Offroad) { mixer.SetFloat(tarmacVolumeString, -80f); mixer.SetFloat(offroadVolumeString, 0f); } else if (surface == RoadSurface.Tarmac) { mixer.SetFloat(tarmacVolumeString, 0f); mixer.SetFloat(offroadVolumeString, -80f); } else if (surface == RoadSurface.Airborne) { mixer.SetFloat(tarmacVolumeString, -80f); mixer.SetFloat(offroadVolumeString, -80f); } foreach (var instance in instances) { float volDB = 0f; if (instance.details.usesSpeedCurve) { float vol = instance.details.speedCurve.Evaluate(speed / instance.details.maxSpeed); volDB -= (1 - vol) * 80f; } if (instance.details.usesTractionCurve) { float traction = 1f; switch (instance.details.tractionType) { case TractionType.ACCELL: traction = accellTraction; break; case TractionType.BRAKE: traction = brakeTraction; break; case TractionType.MIN: traction = Mathf.Min(accellTraction, brakeTraction); break; } float vol = instance.details.tractionCurve.Evaluate(traction); volDB -= (1 - vol) * 80f; } instance.source.volume = EngineAudio.DbToLinear(volDB); } }