Menu
CoddyTech

Ksatria Menyerang

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 40 dari 64.

challenge icon

Tantangan

Sedang

Buat kesatria menyerang saat berhasil menangkap pemain.

  1. Di KnightStates.cs, tulis AttackState: knight.Stop(), lalu langsung knight.playerHealth.TakeDamage(1), kemudian setiap detik. Jika jaraknya lebih dari attackRange, kejar pemain.
  2. Di ChaseState, jika jaraknya kurang dari attackRange, beralih ke knight.attack.
  3. Di Awake milik Knight, tambahkan attack = new AttackState(this);.

Tekan tombol “Main” dan biarkan kesatria menangkapmu: Console menampilkan Player hp: 9. Lalu tekan tombol “Periksa”.

Coba sendiri

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

Semua pelajaran di Arsitektur Game di Unity

Latihan sendiri: Playground Unity