SimpleFSM是一个简单的敌人有限状态机(FSM)实现,用于管理敌人的行为。
SimpleFSM适用于开发2D或3D游戏中的敌人AI系统,特别是那些需要基本状态管理的情况。它可以作为一个简单的起点,用于创建更复杂的敌人行为模式。
这里定义了四种状态:Idle(闲置)、Patrol(巡逻)、Chase(追击)、Dead(死亡),并根据当前状态执行相应的行为。
using System.Collections;
using System.Net.NetworkInformation;
using UnityEngine;
public class EnemySimpleFSM : MonoBehaviour
{
//规范四种状态,闲置,巡逻,追击,死亡
public enum State { Idle, Patrol, Chase, Dead }
[Header("参数")]
public int health; //仅供参考,非必要
public State currentState; //当前执行状态
private void Awake()
{
//仅供参考,唤醒实例化变量
}
private void Start()
{
// 初始化状态,此处为初始化闲置状态
currentState = State.Idle;
}
private void Update()
{
//检测敌人状态变化,非必要
//CheckState();
//注册并轮询状态,初始为闲置Idle状态
currentState = currentState switch
{
State.Idle => UpdateIdleState(),
State.Patrol => UpdatePatrolState(),
State.Chase => UpdateChaseState(),
State.Dead => UpdateDeadState(),
_ => currentState
};
}
private void ChangeState(State nextState) //切换状态函数
{
currentState = nextState;
}
private void CheckState()
{
//检查状态变化,例如接触地面等发生变化时调用,非必要
Debug.Log("Check State");
}
private State UpdateIdleState() //Idle状态
{
Debug.Log("Idle State");
//仅供参考,从闲置状态转入巡逻状态的代码逻辑
//ChangeState(State.Patrol);
return State.Idle; //无变化,则维持闲置状态
}
private State UpdatePatrolState() //巡逻状态
{
Debug.Log("Patrol State");
return State.Patrol; //维持巡逻状态
}
private State UpdateChaseState() //追击状态
{
Debug.Log("Chase State");
return State.Chase;
}
private State UpdateDeadState() //死亡状态
{
Debug.Log("Dead State");
return State.Dead;
}
}
优势:代码结构清晰,便于理解和修改;用枚举来表示状态,可以方便地添加新的状态或调整现有状态之间的转换逻辑;每个状态内都有对应的更新函数,方便添加状态特定的行为逻辑;单个文件解决敌人AI问题;独立游戏开发常用