Scontro con il boss
Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 50 di 50.
Un golem di pietra sorveglia il cancello d’uscita dall’arena. Ti si avvicina pestando i piedi e, quando ti avvicini, alza i pugni per un secondo e colpisce il terreno: se sei ancora nei paraggi, ti fa male. Dopo aver colpito, si riposa e solo allora la tua spada può ferirlo: la sua pelle di pietra respinge ogni colpo mentre cammina o si prepara a colpire. Il suo colore indica cosa sta facendo: grigio mentre cammina, rosso mentre si prepara a colpire, ciano mentre si riposa. Porta la sua salute a 0 e il cancello si apre. La barra nella parte superiore dello schermo si aggiorna a ogni colpo.
Scrivi il cervello del golem come una macchina a stati con una classe per ogni stato: Boss e ChaseState, WindupState e RestState in BossStates.cs. Il giocatore, la barra della salute, il cancello, IState, StateMachine e IDamageable sono già pronti.
Sfida
DifficileNell'Inspector assegna a Boss player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2) e maxHealth (6), e collega il suo UnityEvent onDefeated a Open di Gate. PlayerDistance() e Tint(color) sono già pronti.
BossimplementaIDamageable. InAwakeimposta la sua salute amaxHealthe crea unaStateMachinee i suoi tre stati, conservati nei campi pubblicimachine,chase,winduperest(ogni stato riceve il boss nel proprio costruttore). InStartgeneraHealthChangedcon la sua salute emaxHealthe inizia inchase; a ogni frame fa avanzare la macchina.ChaseState: colora il golem conColor.graye lo fa camminare verso il giocatore lungo il terreno aspeed. Quando il giocatore è entroslamRange, passa allo stato di preparazione.WindupState: lo colora conColor.rede lo tiene fermo perwindupTimesecondi. Poi registraSlam!, infligge al giocatoreslamDamagetramite il suoIDamageablese il giocatore è ancora entroslamRangee passa allo stato di riposo.RestState: lo colora conColor.cyane attenderestTimesecondi, poi torna allo stato di inseguimento. Ogni preparazione e ogni riposo dura per tutto il tempo previsto.TakeDamageha effetto solo mentre il golem è nello stato di riposo e ancora in piedi: sottrae la quantità e generaHealthChanged. A 0 salute registraThe golem falls, richiamaonDefeatede si disattiva.
Premi Play, schiva gli attacchi e colpiscilo mentre riposa, poi premi Check.
Provalo tu
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;
// Quanto dista il giocatore sul piano orizzontale.
public float PlayerDistance()
{
Vector3 d = player.position - transform.position;
d.y = 0f;
return d.magnitude;
}
// Grigio mentre cammina, rosso mentre si prepara all'attacco, ciano mentre riposa.
public void Tint(Color color)
{
GetComponent<Renderer>().material.color = color;
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Architettura dei giochi in Unity
1Componenti, non gerarchie
Componenti piccoliUno script base per i nemiciComponenti astrattiComponenti che collaboranoRiepilogo: torretta modulare4Dati serializzati
Classi serializzabiliListe nell'InspectorEnum nell'InspectorRiepilogo: tabella del bottino7Macchine a stati
Gli stati come classiUna macchina a statiTransizioniIntelligenze dei nemiciRiepilogo: stati della porta10Progetto: Sopravvissuto nell’arena
L’eroeTipi di nemici5ScriptableObjects
Asset di datiStatistiche delle armiImpostazioni condiviseOndate come datiRiepilogo: database degli oggetti