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.
Desafío
Difícil- En
HealthBar, añade un Transform serializadofill(el Inspector asigna el FillPivot de la barra) ypublic void Show(float fraction), que activa el GameObject de la barra y escalafillafractionen el eje x. - En
Enemy, añade un campo serializadohealthBar(un HealthBar). Cada vez que TakeDamage reste salud, muestra la salud restante como una fracción demaxHealth.
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
{
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.