骑士发动攻击
本课属于 Coddy Unity 学习旅程的“Unity 游戏架构”单元。第 40 课,共 64 课。
挑战
中等让骑士抓到玩家时发起攻击。
- 在
KnightStates.cs中编写AttackState:立即调用knight.Stop()和knight.playerHealth.TakeDamage(1),然后每秒调用一次。距离超过attackRange时,追击玩家。 - 在
ChaseState中,距离小于attackRange时,切换到knight.attack。 - 在
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 在线编辑器