有一个触发器,构造函数,也是跟之前解析的,动作状态 LookAtState 和 动作逻辑事件 LookAtHandler 的类似,完成self 和 enemy 的实体赋值; 优先级只是get获取,默认为0; ![[Pasted image 20240411172354.png]] ![[Pasted image 20240411172953.png]] 是否触发的IsTrigger布尔重写,包含具体的业务逻辑,如果self和enemy两者实体,距离小于5,就会旋转,让两者确认面对面 ![[Pasted image 20240411173027.png]] 这个布尔判断,是在帧函数调用的,所以是每一帧都会更新,让两者确保一直面对面 ![[Pasted image 20240411173216.png]] 该触发器,对应的后续影响,就是设置 FIND_ENEMY 状态为true即可 ![[Pasted image 20240411173133.png]] 触发器管理相关的,抽象父类中,完成构造函数 ![[Pasted image 20241007161706.png]] 解析的,玩家Agent代理,使用的触发器,是CustomTriggerMgr,默认触发器管理类,这是对应的具体逻辑,其中,初始化 触发器的逻辑重写,就是把 TriggerEyes面对面 这个触发器,通过 AddTrigger接口,完成添加即可; 后续敌人也会使用,CustomTriggerMgr,默认触发器,业务表现上,就是敌人和玩家,因为使用了相同的触发器逻辑,所以两者,都会保持面对面; ![[Pasted image 20240411173321.png]] 再看敌人身上,挂载的逻辑脚本 ![[Pasted image 20240411173804.png]] 对应的具体逻辑,其中agent代理,使用的是CustomAgent 默认代理器,帧更新函数FixedUpdate中,调用的也是代理agent的FrameFun帧函数 ![[Pasted image 20240411173824.png]] 补充一下,其中调用的UnityTrigger触发器,包含添加碰撞器callback函数,还有OnTriggerEnter触发器的Unity内置函数 ![[Pasted image 20241007170603.png]] 默认代理器CustomAgent,其中的状态初始化,也是设置为IDLE默认状态为true,其他都是false ![[Pasted image 20240411173941.png]] 这是默认的,动作管理器; 其中初始化,添加动作Handler事件,都是通过AddActionHandler添加即可,而且其中的ActionEnum枚举,对应的都是动作Action相关多; 而初始化,添加动作状态Handler,就是使用AddActionStateHandler接口即可,这里绑定的Action和Handler,有:Attack攻击、Alert警戒、Injure受伤、Move移动、Attack_IDLE攻击默认状态; 这里的动作状态,是LOOK_AT,对应的是ActionState,前面解析,会被TriggerEye触发器,进行触发; 而默认的动作标签,是ALERT警告; ![[Pasted image 20240411174145.png]] ![[Pasted image 20240411174341.png]] 警戒对应的动作Action,具体逻辑,先决条件,是FIND_ENEMY为false,没有找到敌人的时候,才会警戒; 而触发警戒的后续影响,是CAN_MOVE为true,逻辑上,是会触发,实体是可移动的Move对应的Action动作; ![[Pasted image 20240411174502.png]] Alert的动作Action,对应的Handler事件逻辑,其中只有一个Enter和Exit的重写,也是打log作为测试记录 ![[Pasted image 20240411174658.png]] 刚提及的,警戒Alert的Effect后续影响,会触发的MoveAction移动动作,先决条件也是CAN_MOVE为true,而它的Effect后续影响,是临近敌人的NEAR_ENEMY和 移动CAN_MOVE为false即可 ![[Pasted image 20240411174741.png]] 而移动Action对应的,移动Handler动作事件,除了self和enemy的赋值,还有使用了,unity内置的角色控制器CharacterController,和移动速度speed,都是在Enter里,完成初始化和赋值 ![[Pasted image 20240411175147.png]] 对应敌人身上挂载的 ![[Pasted image 20240411175517.png]] 移动中,调用的Execute逻辑,是对应了具体的,业务逻辑,根据敌人和自身的距离判断,调用CharacterController角色控制器的SimpleMove接口,完成移动即可; 退出移动状态,也是打印一个log就好 ![[Pasted image 20240415112149.png]]