Menu
CoddyTech

El caballero ataca

Parte de la sección Arquitectura de juegos en Unity del Journey de Unity de Coddy. Lección 40 de 64.

challenge icon

Desafío

Intermedio

Haz que el caballero ataque cuando atrape al jugador.

  1. En KnightStates.cs, escribe AttackState: ejecuta knight.Stop() y knight.playerHealth.TakeDamage(1) de inmediato y, después, cada segundo. Si está a más distancia que attackRange, persigue al jugador.
  2. En ChaseState, si está a menos distancia que attackRange, cambia a knight.attack.
  3. En Awake de Knight, añade attack = new AttackState(this);.

Presiona «Jugar» y deja que el caballero te atrape: la consola muestra Player hp: 9. Después, presiona «Comprobar».

Pruébalo tú mismo

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()
    {
    }
}

Todas las lecciones de Arquitectura de juegos en Unity

Practica por tu cuenta: Playground de Unity