Menu
CoddyTech

Barras de salud

Lección 22 de 25 del curso Juego de Unity: Defensa de torres de Coddy.

Una barra sobre cada enemigo muestra la salud que le queda. En el prefab del enemigo hay dos cubos delgados: un fondo oscuro y un relleno verde delante. El ancho del relleno es la salud restante dividida por la salud total, un número de 0 a 1, y escalar su eje x por ese valor hace que se acorte. Sin embargo, un cubo se escala alrededor de su centro, así que el relleno se encogería hacia el medio desde ambos extremos. El relleno está debajo de un objeto pivot vacío en el borde izquierdo de la barra, y el script escala el pivot en su lugar: todo lo que hay debajo se encoge hacia ese borde y la barra se vacía desde la derecha.

La fracción debe calcularse con números de punto flotante. health / data.maxHealth divide dos enteros, y C# descarta la parte fraccionaria de una división de enteros: 6 / 9 es 0, así que la barra aparecería vacía después del primer golpe. Convertir primero uno de los lados, (float)health / data.maxHealth, da 0.67. Un tanque de agua cuyo nivel sube desde su pivot en la parte inferior:

float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);

Una barra llena no le dice nada al jugador, así que empieza oculta: el prefab la tiene desactivada, y el primer golpe la activa. Un objeto inactivo no recibe llamadas a Update, pero sus métodos aún se pueden llamar. Cada enemigo es su propia copia del prefab, con su propia barra.

challenge icon

Desafío

Difícil

Muestra una barra de salud sobre cada enemigo cuando reciba un golpe.

  1. En HealthBar, añade [SerializeField] private Transform fill; y public void Show(float fraction): activa la barra y establece fill.localScale = new Vector3(fraction, 1f, 1f);.
  2. En Enemy, añade [SerializeField] private HealthBar healthBar;; después de que TakeDamage reste salud, llama a healthBar.Show((float)health / data.maxHealth);.

Pulsa «Jugar»: las barras aparecen y se reducen a medida que las torres golpean. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

// Viene después: la barra sobre un enemigo que muestra la salud que le queda.
public class HealthBar : MonoBehaviour
{
}

Todas las lecciones de Juego de Unity: Defensa de torres

Practica por tu cuenta: Playground de Unity