Menu
CoddyTech

Luta contra o Chefe

Parte da seção Arquitetura de jogos no Unity do Journey de Unity da Coddy. Lição 50 de 50.

Um golem de pedra guarda o portão que leva para fora da arena. Ele avança em sua direção e, quando você se aproxima, ergue os punhos por um segundo e golpeia o chão, causando dano se você ainda estiver por perto. Depois de um golpe, ele descansa, e só então sua espada pode feri-lo: sua pele de pedra repele todos os golpes enquanto ele caminha ou se prepara para atacar. A cor indica o que ele está fazendo: cinza enquanto caminha, vermelho enquanto se prepara para atacar, ciano enquanto descansa. Reduza a vida dele a 0 e o portão se abrirá. A barra no topo da tela acompanha cada golpe.

Escreva o cérebro do golem como uma máquina de estados, com uma classe para cada estado: Boss e ChaseState, WindupState e RestState em BossStates.cs. O jogador, a barra de vida, o portão, IState, StateMachine e IDamageable já estão prontos.

challenge icon

Desafio

Difícil

O Inspector fornece a player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2) e maxHealth (6) a Boss, e conecta seu UnityEvent onDefeated ao Open do Gate. PlayerDistance() e Tint(color) já estão prontos.

  • Boss implementa IDamageable. Em Awake, define sua vida como maxHealth e cria uma StateMachine e seus três estados, armazenados nos campos públicos machine, chase, windup e rest (cada estado recebe o boss em seu construtor). Em Start, dispara HealthChanged com sua vida e maxHealth e começa em chase; a cada quadro, atualiza a máquina.
  • ChaseState: colore o golem com Color.gray e o faz caminhar em direção ao jogador pelo chão na velocidade speed. Quando o jogador está dentro de slamRange, muda para o estado de preparação.
  • WindupState: colore o golem com Color.red e o mantém parado por windupTime segundos. Em seguida, registra Slam!, causa slamDamage ao jogador por meio de seu IDamageable, se o jogador ainda estiver dentro de slamRange, e muda para o estado de descanso.
  • RestState: colore o golem com Color.cyan e espera restTime segundos; então, volta para o estado de perseguição. Cada preparação e cada descanso dura o tempo inteiro.
  • TakeDamage só conta enquanto o golem está no estado de descanso e ainda está de pé: subtrai a quantidade e dispara HealthChanged. Ao chegar a 0 de vida, registra The golem falls, invoca onDefeated e desativa a si mesmo.

Pressione Play, desvie dos golpes e ataque enquanto ele descansa; depois, pressione Check.

Experimente você mesmo

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 distância até o jogador, medida pelo chão.
    public float PlayerDistance()
    {
        Vector3 d = player.position - transform.position;
        d.y = 0f;
        return d.magnitude;
    }

    // Cinza enquanto anda, vermelho enquanto se prepara para atacar, ciano enquanto descansa.
    public void Tint(Color color)
    {
        GetComponent<Renderer>().material.color = color;
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Arquitetura de jogos no Unity