有限状态机架构
状态机
脚本!唯一拥有查找组件能力的人,为状态子类与条件子类提供
代码最多的类!!!!!!
初始化时候配置状态机,读取StreamingAssets文件夹下的文件来反射创建状态对象并且实现数据结构
Dictionary<状态Dictionary<当前状态所有改变状态条件,改变状态条件所对应的状态>>
设置默认状态为当前状态
为状态类提供切换状态方法,unpate中每帧调用状态类中的检测条件是否满足方法,如果满足切换状态
using ARPGDemo.Character;
using ARPGDemo.Skill;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
namespace AI.FSM
{
/*
程序执行流程:
状态机每帧检测当前状态的条件---》状态类遍历所有条件
如果某个条件达成--》状态机切换状态
*/
/// <summary>
/// 状态机
/// </summary>
public class FSMbase : MonoBehaviour
{
//配置状态
//创建状态对象,设置状态(AddMap)
//状态列表
private List<FSMState> states;
//当前状态
private FSMState currentState;
[Tooltip("默认状态ID")]
public FSMStateID defaultStateID;
[Tooltip("当前状态机使用的配置文件")]
public string fileName = "AI_01.txt";
//默认状态
private FSMState defaultState;
//开始时初始化默认状态
private void Awake()
{
ConfigFSM();
InitComponent();
InitDefaultState();
}
/// <summary>
/// 配置状态机
/// </summary>
private void ConfigFSM()
{
states = new List<FSMState>(