Menu
CoddyTech

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.

challenge icon

Desafío

Difícil

El 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.

  • Boss implementa IDamageable. En Awake establece su salud en maxHealth y crea una StateMachine y sus tres estados, guardados en los campos públicos machine, chase, windup y rest (cada estado recibe el jefe en su constructor). En Start emite HealthChanged con su salud y maxHealth y comienza en chase; cada fotograma, actualiza la máquina.
  • ChaseState: tiñe al gólem de Color.gray y lo hace caminar hacia el jugador por el suelo a speed. Cuando el jugador está dentro de slamRange, cambia al estado de preparación.
  • WindupState: lo tiñe de Color.red y lo deja quieto durante windupTime segundos. Después, registra Slam!, inflige al jugador slamDamage mediante su IDamageable si el jugador todavía está dentro de slamRange, y cambia al estado de descanso.
  • RestState: lo tiñe de Color.cyan y espera restTime segundos; después, vuelve al estado de persecución. Cada preparación y cada descanso dura todo el tiempo establecido.
  • TakeDamage solo cuenta mientras el gólem está en estado de descanso y sigue en pie: le resta la cantidad recibida y emite HealthChanged. Cuando su salud llega a 0, registra The golem falls, invoca onDefeated y 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;
    }
}
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 Arquitectura de juegos en Unity