Menu
CoddyTech

Il cavaliere attacca

Fa parte della sezione Architettura dei giochi in Unity del percorso Unity di Coddy. Lezione 40 di 64.

challenge icon

Sfida

Medio

Fai attaccare il cavaliere quando raggiunge il giocatore.

  1. In KnightStates.cs, scrivi AttackState: knight.Stop() e knight.playerHealth.TakeDamage(1) subito, poi ogni secondo. Se la distanza supera attackRange, inseguilo.
  2. In ChaseState, se la distanza è inferiore a attackRange, passa a knight.attack.
  3. Nell'Awake di Knight, aggiungi attack = new AttackState(this);.

Premi «Gioca» e lascia che il cavaliere ti raggiunga: la Console mostra Player hp: 9. Poi premi «Verifica».

Provalo tu

using UnityEngine;

public class PatrolState : IState
{
    private Knight knight;
    private int next;

    public PatrolState(Knight knight)
    {
        this.knight = knight;
    }

    public void Enter()
    {
    }

    public void Tick()
    {
        if (knight.PlayerDistance() < knight.sightRange)
        {
            knight.machine.ChangeState(knight.chase);
            return;
        }
        Vector3 point = knight.waypoints[next].position;
        if (knight.DistanceTo(point) < 0.3f)
        {
            next = (next + 1) % knight.waypoints.Length;
        }
        knight.WalkTo(knight.waypoints[next].position);
    }

    public void Exit()
    {
    }
}

public class ChaseState : IState
{
    private Knight knight;

    public ChaseState(Knight knight)
    {
        this.knight = knight;
    }

    public void Enter()
    {
    }

    public void Tick()
    {
        float distance = knight.PlayerDistance();
        if (distance > knight.loseRange)
        {
            knight.machine.ChangeState(knight.patrol);
            return;
        }
        knight.WalkTo(knight.player.position);
    }

    public void Exit()
    {
    }
}

Tutte le lezioni di Architettura dei giochi in Unity

Esercitati da solo: Playground Unity