Esempio n. 1
0
 void Awake()
 {
     instance = this;
     lowRain.Play();
     lowRain.loop   = true;
     lowRain.volume = 0;
     highRain.Play();
     highRain.loop   = true;
     highRain.volume = 0;
 }
        public static void SetRainStrength(float strength)
        {
            ParticleSystem.EmissionModule module = RainParticleSystems[0].emission;
            module.rateOverTime = maxParticleEmission[0] * strength;

            module = RainParticleSystems[1].emission;
            module.rateOverTime = maxParticleEmission[1] * strength;

            module = RainParticleSystems[2].emission;
            module.rateOverTime = maxParticleEmission[2] * strength;

            if (RainAudio.isPlaying)
            {
                if (strength > 0)
                {
                    float multiplier = 0;
                    int   samples    = 0;
                    for (int x = 0; x < WeatherSource.CloudRenderImage0.width; x++)
                    {
                        for (int y = 0; y < WeatherSource.CloudRenderImage0.height; y++)
                        {
                            multiplier += Mathf.RoundToInt(WeatherSource.CloudRenderImage0.GetPixel(x, y).a);
                            samples++;
                        }
                    }
                    multiplier /= samples;                     // percentage of sky directly above player that is raining
                    multiplier  = SimplisticCompressor(multiplier, 0.125f);
                    //multiplier = SimplisticCompressor(multiplier, 0.25f);
                    RainAudio.volume = Mathf.MoveTowards(RainAudio.volume, strength * multiplier, 0.001f);
                }
                else
                {
                    RainAudio.Stop();
                }
            }
            else
            {
                if (strength > 0)
                {
                    RainAudio.Play();
                }
            }
        }