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 56.

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

fillAmount es la proporción de salud que queda: la salud dividida por su máximo. Con campos int, eso es una división entera, y 350 / 500 es 0, así que primero convierte uno de los lados a float. Image se encuentra en UnityEngine.UI. Esta barra de 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 seguir 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

La caballera tiene un escudo que absorbe el daño antes que su salud. Las flechas la mueven (Mover.cs), y los pinchos le hacen 30 de daño cuando los pisa (Spikes.cs). Escribe Knight.cs; la escena enlaza healthBar y shieldBar, que están vacías en la escena:

  • hp empieza en maxHp (80) y shield en maxShield (40), y ambas barras empiezan llenas.
  • TakeDamage(int amount): el escudo absorbe todo el daño que pueda según lo que le quede, y el resto se resta de hp, que nunca baja de 0.
  • Después de cada golpe, ambas barras muestran lo que queda: shieldBar muestra el escudo restante de maxShield, y healthBar los hp restantes de maxHp.

Pulsa Play, pisa los pinchos unas cuantas veces y luego pulsa Check.

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 todo lo que puede; el resto se descuenta de hp, sin bajar de 0. Luego muestra ambas barras.
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Creación de juegos reales