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.
Desafío
DifícilMuestra una barra de salud sobre cada enemigo cuando reciba un golpe.
- En
HealthBar, añade[SerializeField] private Transform fill;ypublic void Show(float fraction): activa la barra y establecefill.localScale = new Vector3(fraction, 1f, 1f);. - En
Enemy, añade[SerializeField] private HealthBar healthBar;; después de queTakeDamagereste salud, llama ahealthBar.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