游戏中的AI算法_第一章
介绍一下,GOAP决策算法,定义可以参考GOAP 目标导向型行为计划 AI 算法 先弄一个打log的抽象基类,其中包含单例Instance,还有三个抽象函数,分别对应,普通log打印,警告log打印,错误log打印
打印类,几个静态接口,调用了抽象基类的
这是继承自,抽象基类的,具体实现,调用Debug内置的打印接口
这是状态接口,其中两个Set重载函数,分别用于,保存数据、和状态覆盖,还有一个Get函数,用来读取数据,AddStateChangeListener函数接口,是数据修改相关监听
继续
一个静态类,用来创建一个新状态
对应状态接口的,是状态基类,声明了_dataTable字典容器,用来存储状态变化相关,通过布尔控制,而_onChange就是修改状态,对应的Action回调; 通过ChangeValue函数接口,完成状态的修改,和触发回调; Set函数,就是保存修改;
添加事件监听接口
foreach遍历,状态字典容器,如果传参过来的,otherState状态,包含相同的key,就把字典容器对应key的value,设置到一个新状态; InversionValue函数接口,就是翻转字典容器中,所有状态;
Get从字典容器获取状态,而ContainState函数接口,通过key判断,传参otherState是否在字典容器中
拿到不同的key,和拿到非字典容器包含的key,返回都是ICollection泛型集合
其余函数接口实现
key和value组合,重写字符Tostring
继承自状态基类,泛型传参,有保存设置状态、获取状态、判断是否包含状态 等逻辑
资源通过对象池ObjectPool管理,弄一个对应的_instance单例,还有两个字典容器,分别代表活跃,和非活跃Type类型
创建Object实体的接口,参考Activator.CreateInstance 方法
从非活跃,变成活跃,是Spwan函数接口,两个字典容器的进出操作,也调用上述SpwanNew接口,完成实例化
与之对应的,从活跃变回非活跃
动作基类接口,其中包含,标签label,消耗cost,执行优先级,是否可打断,执行动作的先决条件,动作执行后的状态
还有一个,先决条件验证
有限状态机,管理动作状态相关,先弄一个枚举,代表不同的动作执行状态
动作状态的FSM,有限状态机接口,标签、进入动作、动作期间的更新动作、退出动作,几个接口
这是IFSM接口,主要是用于,添加状态、执行状态,和对应状态下,执行的帧函数
状态机ActionFSM,主要是用于注册新状态,和修改状态字典逻辑
继续,执行新状态之前,先Exit之前的_previousState前状态,再Enter进入_currentState现状态,还有帧更新函数的Execute调用,对应的是IFsmState接口的实现
另一个动作状态机FSM,主要是用于添加新状态
继续,也有帧更新函数,也是对应IFSMState接口实现的,Execute调用
动作事件接口,判断是否可执行动作,还有动作完成之后的回调