Menu
CoddyTech

Barras de salud

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 10 de 60.

Una barra que se vacía es una imagen de la interfaz de usuario cuyo Tipo de imagen está configurado como Relleno. Esa opción aparece cuando la imagen tiene una Imagen de origen; si está en None, el Inspector la oculta. El Método de relleno Horizontal con el Origen del relleno Izquierda hace que la barra se acorte hacia su extremo izquierdo, y fillAmount, de 0 a 1, indica qué parte se dibuja. Una imagen oscura detrás muestra la parte vacía. Unity limita fillAmount, por lo que 1.4 dibuja una barra completa y -0.2 una vacía.

fillAmount representa la parte de salud restante: la salud dividida por su máximo. Con campos int, eso es una división entera, y 350 / 500 da 0, así que primero convierte uno de los lados a float. Image está en UnityEngine.UI. Esta barra del jefe se actualiza después de cada golpe:

public Image bossBar;
public int bossMaxHp = 500;
private int bossHp = 500;

public void Hit(int damage)
{
    bossHp = Mathf.Max(bossHp - damage, 0);
    bossBar.fillAmount = (float)bossHp / bossMaxHp;   // 350 / 500 = 0.7
}

El color de la barra también puede reflejar la salud: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); es verde cuando la barra está llena y se vuelve roja a medida que se vacía.

challenge icon

Desafío

Fácil

Muestra el escudo y la salud del caballero en dos barras.

  1. Escribe ShowBars(): shieldBar.fillAmount = (float)shield / maxShield;, y haz lo mismo con healthBar, usando hp y maxHp. Llámala en Start().
  2. En TakeDamage, el escudo recibe Mathf.Min(amount, shield) y el resto se resta de hp, que nunca baja de 0. Después, llama a ShowBars().

Pulsa «Jugar» y camina sobre los pinchos: la barra del escudo se vacía primero. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;
using UnityEngine.UI;

public class Knight : MonoBehaviour
{
    public Image healthBar;
    public Image shieldBar;
    public int maxHp = 80;
    public int maxShield = 40;
    private int hp;
    private int shield;

    void Start()
    {
        hp = maxHp;
        shield = maxShield;
        // Llena ambas barras
    }

    public void TakeDamage(int amount)
    {
        // El escudo absorbe lo que puede; el resto se descuenta de hp, hasta llegar a 0. Luego muestra ambas barras.
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity