Menu
CoddyTech

Hiệp sĩ tấn công

Thuộc phần Kiến trúc trò chơi trong Unity trong hành trình Unity của Coddy. Bài học 40 trên 64.

challenge icon

Thử thách

Trung bình

Cho hiệp sĩ tấn công khi bắt kịp người chơi.

  1. Trong KnightStates.cs, viết AttackState: gọi knight.Stop() và knight.playerHealth.TakeDamage(1) ngay lập tức, rồi cứ mỗi giây gọi một lần. Nếu ở xa hơn attackRange, hãy đuổi theo.
  2. Trong ChaseState, nếu ở gần hơn attackRange, hãy chuyển sang knight.attack.
  3. Trong Awake của Knight, thêm attack = new AttackState(this);.

Nhấn Chơi và để hiệp sĩ bắt kịp bạn: Console hiển thị Player hp: 9. Sau đó nhấn Kiểm tra.

Tự làm thử

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

Tất cả bài học trong Kiến trúc trò chơi trong Unity

Tự luyện tập: Playground Unity