obsidian/笔记文件/2.笔记/游戏中的AI算法_第二章.md
2025-03-26 00:02:56 +08:00

4.7 KiB
Raw Permalink Blame History

弄一个代理基类接口

!Pasted image 20240410105248.png

动作映射管理类,用于把目标和代理,关联起来

!Pasted image 20240410105311.png

目标基类接口,包含标签,优先级等

!Pasted image 20240410105403.png

更新数据函数,和打断相关,基类接口

!Pasted image 20240410105432.png

计划队列接口

!Pasted image 20240410105506.png

触发器的基类接口,包含优先级,是否触发的布尔判断,还有更新的帧函数

!Pasted image 20240410105605.png

树节点其中包含对应该节点的默认ID常量父节点动作事件IActionHandler接口对应节点的当前状态目标状态完成的消耗等

!Pasted image 20240410105708.png

树节点逻辑的构造函数就是初始化各个声明的变量和调用State状态的CreateNew接口创建俩空的新状态分别对应当前状态和目标状态

!Pasted image 20240410154826.png

树逻辑其中包含创建一个新的树节点还有创建一个顶部节点调用了树节点的重置ID逻辑将ID归零

!Pasted image 20240410105955.png

!Pasted image 20240410105901.png

回到动作对象映射管理类接口除了获取动作事件外还有获取目标、设置和获取游戏数据函数接口是通过key配合字典容器进行这一系列操作

!Pasted image 20240410113347.png

抽象映射基类继承自IMaps映射接口其中声明了几个字典容器分别用来存储事件接口实现目标游戏数据相关 还有两个变量代理_agent和对对象池_pool 在构造函数中,对它们完成初始化即可; 对应调用的,各个初始化函数,如下所示;

!Pasted image 20240410113751.png

!Pasted image 20240410114034.png

!Pasted image 20240410114114.png

两个接口,都是从字典容器,获取对应的动作和目标数据

!Pasted image 20240410114149.png

而添加动作和目标到字典容器接口也是同理配合对象池_pool管理即可

!Pasted image 20240410114357.png

设置和获取游戏数据对_gameData字典容器操作即可

!Pasted image 20240410114234.png

!Pasted image 20240410114313.png

代理基类接口中,也会有对应的映射接口

!Pasted image 20240410114507.png

这是继承自动作事件接口IActionHandler的抽象类声明了对应的Action动作和Label标签 还有ActionExcuteState枚举是对应有限状态机FSM的用来设定当前动作所处的状态 还声明了对应的代理_agent动作完成对应的Action回调_onFinishAction映射_map

!Pasted image 20240410114633.png

构造函数中id自增其他声明的变量也完成初始化设定当前动作的枚举是INIT初始化 而SetAgentData是覆盖当前状态的stateSetAgentState是新增一个键值对数据

!Pasted image 20240410115011.png

!Pasted image 20240410115203.png

动作完成的异步回调OnComplete使用async 而CanPerformAction虚函数是返回对应Action动作的VerifyPreconditions先决条件 AddFinishCallBack接口是完成回调函数的赋值

!Pasted image 20240410115233.png

!Pasted image 20240410115411.png

几个获取游戏数据的接口都是调用映射map的对应接口即可

!Pasted image 20240410115512.png

动作的三种状态:进入、进行中、结束

!Pasted image 20240410115539.png

事件管理的基类接口,包含 是否执行动作的布尔判断效果和动作的映射map字典容器还有默认动作的表情标签

!Pasted image 20240410120741.png

其余的函数接口

!Pasted image 20240410120936.png

!Pasted image 20240410120958.png

抽象类ActionManagerBase是继承实现事件管理接口声明了几个容器存储动作、动作状态、能打断当前计划的动作 还有动作本身的状态机,动作状态的 状态机; 动作对应的_agent代理还有是否在执行的布尔标志位

!Pasted image 20240410121032.png

动作和效果对应的map映射关系其中Effect效果指的是动作执行之后的状态还有动作完成的回调

!Pasted image 20240410121253.png

!Pasted image 20240829131009.png

初始化动作和状态映射关系的具体逻辑先foreach遍历动作字典_actionHandlerDic拿到其中的handler然后提取出它的Effects影响状态 如果不为空就拿到对应的key是调用了state状态类中_dataTable状态字典容器的key总集作为EffectsAndActionMap映射字典容器的key 然后构建键值对完成key和value的映射即可

!Pasted image 20240410121521.png

!Pasted image 20240410121916.png