Menu
CoddyTech

Der Ritter greift an

Teil des Abschnitts Spielarchitektur in Unity der Unity-Journey von Coddy. Lektion 40 von 64.

challenge icon

Aufgabe

Mittel

Lass den Ritter angreifen, wenn er den Spieler erwischt.

  1. Schreibe in KnightStates.cs den Zustand AttackState: knight.Stop() und sofort knight.playerHealth.TakeDamage(1), dann jede Sekunde. Bei einer größeren Entfernung als attackRange soll er verfolgen.
  2. Wechsle in ChaseState bei einer geringeren Entfernung als attackRange zu knight.attack.
  3. Füge in Knights Awake attack = new AttackState(this); hinzu.

Drücke „Spielen“ und lass den Ritter dich erwischen: In der Console wird Player hp: 9 angezeigt. Drücke dann auf „Prüfen“.

Probier es selbst

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

Alle Lektionen in Spielarchitektur in Unity

Übe selbstständig: Unity-Playground