引用的命名空间 ![[Pasted image 20241004103551.png]] 对应Plan动作计划的Handler回调逻辑的接口,其中包含布尔判断,执行结果,还有初始化、开始执行、下一动作、中断计划; 还有获取当前Queue容器中,最外层的动作Handler数据接口; ![[Pasted image 20240410160247.png]] 这是对应动作计划hanlder接口的,实现逻辑,其中声明了Plan数据Queue容器,动作管理器、计划完成回调_onComplete; 还有当前的动作Handler事件,当前Plane计划是否已经被打断; ![[Pasted image 20240410160511.png]] 是否完成的获取器,通过打断的布尔判断 + plan计划判空 + 数据容器Count是否为0 + 当前 动作Handler事件的ExcuteState枚举状态,是否等于EXIT,这几个配合返回结果即可 ![[Pasted image 20240410160748.png]] 初始化,和添加完成回调 ![[Pasted image 20240410161036.png]] 如果已经完成,调用对应回调即可,否则,从容器Dequeue出队数据,作为当前动作Handler,调用动作管理器的ExcuteNewState接口,执行新动作即可; 设置,打断当前计划的,是Interruptible接口; 而获取,当前动作Handler的。是GetCurrentHandler接口; ![[Pasted image 20240410161104.png]] 开始计划,就是调用NextAction即可 ![[Pasted image 20240410173118.png]] 计划Plan的节点,也有一个类去声明,暂时用不上 ![[Pasted image 20240410165928.png]] 针对不同的动作,有几个枚举 ![[Pasted image 20240410170532.png]] 目标的 ![[Pasted image 20240410170552.png]] 行为 ![[Pasted image 20240410170617.png]] 继续 ![[Pasted image 20240410170641.png]] 判断是自身还是敌人,需要注意的是,相对于敌人来说,玩家是敌人 ![[Pasted image 20240410170711.png]] 回到触发器接口,与之对应的实现抽象类,是在同一个脚本文件,其中声明了优先级,会被触发的_effects状态,还有对应触发器的_agent代理器; InitEffects是初始化,触发后的结果,在构造函数中,被赋予_effects; FrameFun是帧更新函数,如果被触发的IsTrigger布尔为true,就会调用调用触发结果,Set修改State状态; ![[Pasted image 20240410170937.png]] 触发器的管理接口,其中只有一个帧函数声明 ![[Pasted image 20240410172317.png]] 对应的实现抽象类,声明了代理_agent和触发器List容器 ![[Pasted image 20240410172406.png]] FrameFun帧更新函数,就是遍历所有的触发器,调用其中的FrameFun帧更新函数即可; 添加触发器的AddTrigger函数,在添加完成后,还会OrderByDescending降序,重新排列,确保 Priority优先级高的触发器,在前面; 初始化、添加触发器的 InitTriggers 抽象函数,会在业务的逻辑中,完成override重写; ![[Pasted image 20240410172441.png]] Performer是基于之前提及的IPerformer接口的,实现类; 主要是用来关联,计划任务、目标、动作,三者管理器的逻辑; ![[Pasted image 20241005112647.png]] 完成计划,还有完成动作的回调函数 ![[Pasted image 20241005112756.png]] 声明的plan计划、goal目标、action动作相关,完成后的Complete回调,都在传参代理agent的,构造函数,完成初始化; ![[Pasted image 20241005112854.png]] 当前goal目标传参,通过BuildPlan完成计划的初始化后; 遍历plan这个Queue容器,完成Init初始化后,调用Handler的StartPlan接口,开始计划的动作行进,同时回顾一下,动作管理器的,IsPerformAction布尔设置为true,代表,开始执行动作即可; ![[Pasted image 20240410173219.png]] ![[Pasted image 20240410173414.png]] 调用PlanHandler的接口,完成打断计划逻辑 ![[Pasted image 20240410173534.png]] 制定计划,进行下一步动作的接口 ![[Pasted image 20241005113328.png]] Performer类,更新数据的逻辑,是判断当前计划是否完成,再调用BuildPlanAndStart开启计划即可 ![[Pasted image 20240410173908.png]]