Combate contra el jefe
Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 50 de 50.
Un gólem de piedra protege la puerta para salir de la arena. Avanza hacia ti dando pisotones y, cuando te acercas, levanta los puños durante un segundo y golpea el suelo; eso te hace daño si sigues cerca. Después de un golpe, descansa, y solo entonces tu espada puede hacerle daño: su piel de piedra resiste todos los golpes mientras camina o se prepara para atacar. Su color indica lo que está haciendo: gris mientras camina, rojo mientras se prepara para atacar y cian mientras descansa. Reduce su salud a 0 y la puerta se abrirá. La barra en la parte superior de la pantalla refleja cada golpe.
Escribe el cerebro del gólem como una máquina de estados con una clase para cada estado: Boss y ChaseState, WindupState y RestState en BossStates.cs. El jugador, la barra de salud, la puerta, IState, StateMachine e IDamageable ya están listos.
Desafío
DifícilEl Inspector proporciona a Boss player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2) y maxHealth (6), y conecta su UnityEvent onDefeated con Open de Gate. PlayerDistance() y Tint(color) ya están listos.
BossimplementaIDamageable. EnAwakeestablece su salud enmaxHealthy crea unaStateMachiney sus tres estados, guardados en los campos públicosmachine,chase,windupyrest(cada estado recibe el jefe en su constructor). EnStartemiteHealthChangedcon su salud ymaxHealthy comienza enchase; cada fotograma, actualiza la máquina.ChaseState: tiñe al gólem deColor.grayy lo hace caminar hacia el jugador por el suelo aspeed. Cuando el jugador está dentro deslamRange, cambia al estado de preparación.WindupState: lo tiñe deColor.redy lo deja quieto durantewindupTimesegundos. Después, registraSlam!, inflige al jugadorslamDamagemediante suIDamageablesi el jugador todavía está dentro deslamRange, y cambia al estado de descanso.RestState: lo tiñe deColor.cyany esperarestTimesegundos; después, vuelve al estado de persecución. Cada preparación y cada descanso dura todo el tiempo establecido.TakeDamagesolo cuenta mientras el gólem está en estado de descanso y sigue en pie: le resta la cantidad recibida y emiteHealthChanged. Cuando su salud llega a 0, registraThe golem falls, invocaonDefeatedy se desactiva.
Presiona Play, esquiva los golpes y ataca mientras descansa; después, Check.
Pruébalo tú mismo
using System;
using UnityEngine;
using UnityEngine.Events;
public class Boss : MonoBehaviour
{
public Transform player;
public float speed = 2f;
public float slamRange = 2.5f;
public float windupTime = 1f;
public float restTime = 2f;
public int slamDamage = 2;
public int maxHealth = 6;
public event Action<int, int> HealthChanged;
public UnityEvent onDefeated;
// A qué distancia está el jugador sobre el suelo.
public float PlayerDistance()
{
Vector3 d = player.position - transform.position;
d.y = 0f;
return d.magnitude;
}
// Gris mientras camina, rojo mientras prepara el ataque y cian mientras descansa.
public void Tint(Color color)
{
GetComponent<Renderer>().material.color = color;
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Arquitectura de juegos en Unity
1Componentes, no jerarquías
Componentes pequeñosUn script base para enemigosComponentes abstractosComponentes que trabajan juntosRepaso: torreta modular4Datos serializados
Clases serializablesListas en el InspectorEnumeraciones en el InspectorRepaso: tabla de botín7Máquinas de estados
Estados como clasesUna máquina de estadosTransicionesCerebros de enemigosRepaso: estados de puertas10Proyecto: Superviviente de la arena
El héroeTipos de enemigos2Interfaces en Unity
IDamageableInterfaces y TryGetComponentGetComponentsRepaso: tecla de interacción5ScriptableObjects
Recursos de datosEstadísticas de armasConfiguración compartidaOleadas como datosRepaso: base de datos de objetos