예제 #1
0
    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);
        }
    }