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.
Desafio
DifícilO 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.
BossimplementaIDamageable. EmAwake, define sua vida comomaxHealthe cria umaStateMachinee seus três estados, armazenados nos campos públicosmachine,chase,winduperest(cada estado recebe o boss em seu construtor). EmStart, disparaHealthChangedcom sua vida emaxHealthe começa emchase; a cada quadro, atualiza a máquina.ChaseState: colore o golem comColor.graye o faz caminhar em direção ao jogador pelo chão na velocidadespeed. Quando o jogador está dentro deslamRange, muda para o estado de preparação.WindupState: colore o golem comColor.rede o mantém parado porwindupTimesegundos. Em seguida, registraSlam!, causaslamDamageao jogador por meio de seuIDamageable, se o jogador ainda estiver dentro deslamRange, e muda para o estado de descanso.RestState: colore o golem comColor.cyane esperarestTimesegundos; então, volta para o estado de perseguição. Cada preparação e cada descanso dura o tempo inteiro.TakeDamagesó conta enquanto o golem está no estado de descanso e ainda está de pé: subtrai a quantidade e disparaHealthChanged. Ao chegar a 0 de vida, registraThe golem falls, invocaonDefeatede 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;
}
}
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
1Componentes, não hierarquias
Componentes pequenosUm script-base para inimigosComponentes abstratosComponentes trabalhando juntosRevisão: Torre modular4Dados Serializados
Classes SerializáveisListas no InspectorEnums no InspectorRevisão: Tabela de Loot7Máquinas de Estados
Estados como ClassesUma Máquina de EstadosTransiçõesInteligências dos InimigosRevisão: Estados da Porta10Projeto: Sobrevivente da Arena
O HeróiTipos de Inimigos5ScriptableObjects
Assets de dadosAtributos das armasConfigurações compartilhadasOndas como dadosRevisão: banco de dados de itens