UnityLear 2D RPG项目—— 敌人状态机
最近重新复习Unity项目,对2D RPG 代码做一下笔记
文章目录
前言
状态机主要由抽象类实现,对状态包含的 方法 进行声明即可
一、Enemy 基类状态声明 以及 调用
1、Enemy 基类状态 声明
此处 只涉及到了 1、PatrolState (巡逻状态) 2、AttackState 攻击状态
无论是哪种状态, 都需要有 相同类型的方法定义,包括
1、OnEnterState (Start/初始化时调用)
2、OnUpdateState (Update 时调用)
创建 EnemyBaseState script, 代码如下:
// 基类构建 对象为 Enemy
Public abstract class EnemyBaseState{
public abstract void OnEnterState(Enemy enemy);
public abstract void OnUpdateState(Enemy enemy);
}
2、Enemy 基类状态 调用
调用 需要 状态切换方法 TransitionToState (), 在Enemy 父类脚本中 添加该方法
public void TransitionToState(EnemyBaseState state){
currentState = state; // Enemy 当前状态 切换为 输入参数状态
currentState.OnEnterState(this); // 运行 状态开始时调用的方法
}
例子:
先声明:
在Enemy对象的 Start() 方法中 将 初始状态切换为 巡逻状态
在 Enemy对象的 Update() 方法中 调用 OnupdateState()