Menu
CoddyTech

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.

challenge icon

Sfida

Difficile

Nell'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.

  • Boss implementa IDamageable. In Awake imposta la sua salute a maxHealth e crea una StateMachine e i suoi tre stati, conservati nei campi pubblici machine, chase, windup e rest (ogni stato riceve il boss nel proprio costruttore). In Start genera HealthChanged con la sua salute e maxHealth e inizia in chase; a ogni frame fa avanzare la macchina.
  • ChaseState: colora il golem con Color.gray e lo fa camminare verso il giocatore lungo il terreno a speed. Quando il giocatore è entro slamRange, passa allo stato di preparazione.
  • WindupState: lo colora con Color.red e lo tiene fermo per windupTime secondi. Poi registra Slam!, infligge al giocatore slamDamage tramite il suo IDamageable se il giocatore è ancora entro slamRange e passa allo stato di riposo.
  • RestState: lo colora con Color.cyan e attende restTime secondi, poi torna allo stato di inseguimento. Ogni preparazione e ogni riposo dura per tutto il tempo previsto.
  • TakeDamage ha effetto solo mentre il golem è nello stato di riposo e ancora in piedi: sottrae la quantità e genera HealthChanged. A 0 salute registra The golem falls, richiama onDefeated e 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;
    }
}
quiz iconMettiti alla prova

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