Barras de salud
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 10 de 60.
Una barra que se vacía es una imagen de la interfaz de usuario cuyo Tipo de imagen está configurado como Relleno. Esa opción aparece cuando la imagen tiene una Imagen de origen; si está en None, el Inspector la oculta. El Método de relleno Horizontal con el Origen del relleno Izquierda hace que la barra se acorte hacia su extremo izquierdo, y fillAmount, de 0 a 1, indica qué parte se dibuja. Una imagen oscura detrás muestra la parte vacía. Unity limita fillAmount, por lo que 1.4 dibuja una barra completa y -0.2 una vacía.
fillAmount representa la parte de salud restante: la salud dividida por su máximo. Con campos int, eso es una división entera, y 350 / 500 da 0, así que primero convierte uno de los lados a float. Image está en UnityEngine.UI. Esta barra del 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 reflejar 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.
Desafío
FácilMuestra el escudo y la salud del caballero en dos barras.
- Escribe
ShowBars():shieldBar.fillAmount = (float)shield / maxShield;, y haz lo mismo conhealthBar, usandohpymaxHp. Llámala enStart(). - En
TakeDamage, el escudo recibeMathf.Min(amount, shield)y el resto se resta dehp, que nunca baja de 0. Después, llama aShowBars().
Pulsa «Jugar» y camina sobre los pinchos: la barra del escudo se vacía primero. Después, pulsa «Comprobar».
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 lo que puede; el resto se descuenta de hp, hasta llegar a 0. Luego muestra ambas barras.
}
}
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: Corredor sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity