Menu
CoddyTech

Barras de salud

Lección 16 de 18 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
  1. En HealthBar, añade un Transform serializado fill (el Inspector asigna el FillPivot de la barra) y public void Show(float fraction), que activa el GameObject de la barra y escala fill a fraction en el eje x.
  2. En Enemy, añade un campo serializado healthBar (un HealthBar). Cada vez que TakeDamage reste salud, muestra la salud restante como una fracción de maxHealth.

Cada prefab de enemigo tiene su barra: inactiva, con el script HealthBar y el relleno bajo un pivote en el borde izquierdo. Pulsa Play y observa las barras mientras disparan las torres; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

// Se verá más adelante: la barra sobre un enemigo que muestra cuánta salud le queda.
public class HealthBar : MonoBehaviour
{
}
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 Juego de Unity: defensa de torres