Menu
CoddyTech

骑士发动攻击

本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 40 课,共 64 课。

challenge icon

挑战

中等

让骑士抓到玩家时发起攻击。

  1. 在 KnightStates.cs 中编写 AttackState:立即调用 knight.Stop() 和 knight.playerHealth.TakeDamage(1),然后每秒调用一次。距离超过 attackRange 时,追击玩家。
  2. 在 ChaseState 中,距离小于 attackRange 时,切换到 knight.attack。
  3. 在 Knight 的 Awake 中,添加 attack = new AttackState(this);。

按下“开始”,让骑士抓到你:Console 中会显示 Player hp: 9。然后点击“检查”。

亲手试试

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

Unity 游戏架构中的所有课

自己练习: Unity 在线编辑器