void Update()
    {
        // Do nothing if you're already dead.
        if (dead)
        {
            return;
        }
        // Raise rate per second
        ratePerSecond += (Time.deltaTime * decreaseRateSpeedUp);
        ratePerSecond  = Mathf.Clamp(ratePerSecond, 0, decreaseRateMax);
        // Initialize all rates
        float hungerRate  = ratePerSecond;
        float fatRate     = ratePerSecond;
        float sugarRate   = ratePerSecond;
        float vitaminRate = ratePerSecond;

        /*
         * Calculate hunger rate and obesity effects.
         */
        if (!HasObesity)
        {
            if (hungerBar.Value > hungerMinMax.y)
            {
                obesityTimer = Time.time + obesityCooldown;
            }
        }
        else
        {
            hungerRate  *= obesityMultiplier;
            fatRate     *= obesityMultiplier;
            sugarRate   *= obesityMultiplier;
            vitaminRate *= obesityMultiplier;
        }
        // Efecto de estados en otros estados
        if (sugarBar.Value < sugarMinMax.x)
        {
            hungerRate *= debuffMultiplier;                                 // Si el azucar está baja
        }
        if (vitaminBar.Value > vitaminMinMax.y)
        {
            hungerRate *= debuffMultiplier;                                     // Si las vitaminas están altas
        }
        if (fatBar.Value < fatMinMax.x)
        {
            vitaminRate *= debuffMultiplier;                             // Si la grasa está baja
        }
        // Submit all changes
        hungerBar.Value  -= hungerRate * Time.deltaTime;
        fatBar.Value     -= fatRate * Time.deltaTime;
        sugarBar.Value   -= sugarRate * Time.deltaTime;
        vitaminBar.Value -= vitaminRate * Time.deltaTime;
        // Check if you're... uh... sleeping with the fish -_- zZZ
        // Muerte por inanición
        if (hungerBar.Value <= hungerMinMax.x)
        {
            dead       = true;
            deathCause = "Inanición";
        }
        // Muerte por paro cardíaco
        if (fatBar.Value > fatMinMax.y)
        {
            dead       = true;
            deathCause = "Paro cardíaco";
        }
        // Muerte por coma diabético
        if (sugarBar.Value > sugarMinMax.y)
        {
            dead       = true;
            deathCause = "Coma diabético";
        }
        // Muerte por escorbuto
        if (vitaminBar.Value <= vitaminMinMax.x)
        {
            dead       = true;
            deathCause = "Escorbuto";
        }
        // Do something if dead
        if (dead)
        {
            Debug.Log("Causa: " + deathCause);
            ScoreCounter scoreCounter  = GameObject.FindObjectOfType <ScoreCounter>();
            string       favouriteFood = GetFavourite();
            string       lastFoodName  = GetLastFood();
            gameOverMessage.CallLose(deathCause, scoreCounter.Score, favouriteFood, lastFoodName); // Cambiar 0 a un score real
            ChangeHealth(0);
            PlayDeath();
        }
        else
        {
            // Update character visible status.
            if (HasObesity)
            {
                ChangeHealth(3);
            }
            else
            {
                float fH = Mathf.Abs(fatBar.Value - .5f);
                float sH = Mathf.Abs(sugarBar.Value - .5f);
                float vH = Mathf.Abs(vitaminBar.Value - .5f);
                float hH = (1 - hungerBar.Value) / 3f;
                //
                //float health = (fH + sH + vH) / 3;
                float health = Mathf.Max(fH, sH, vH, hH);
                if (health > 0.25f)
                {
                    ChangeHealth(1);
                }
                else
                {
                    ChangeHealth(2);
                }
            }
        }
    }