敌人的,受伤的Action,进入的先决条件是 INJURE 状态为TRUE即可

后续影响,也是对应设置,INJURE状态为false即可

对应的动作 Handler 逻辑,只有一个,进入受伤动作的逻辑,打log,然后使用await异步任务,等待2秒,调用完成回调

这里是Goal目标的,业务逻辑,脚本合集

对应的脚本,都是设置优先级 Priority,后续影响Effect,触发条件ActiveCondition,分别是 警戒、攻击、攻击默认状态、受伤 四个Goal目标

默认的,目标管理器,完成各个目标的添加

调用的是,目标管理器的AddGoal接口,而且这个接口,是调用了Map映射表的GetGoal接口

然后,是敌人调用的Map映射,通过AddAction接口,绑定了,动作对应的Hanlder和Action; 通过AddGoal接口,把对应的目标添加到,映射表内,统一的_goalsDic字典容器,进行管理,上述的GoalManager目标管理器,就是在这里调用,拿到对应的goal目标;

还有初始化,设置游戏数据,就跟PlayerMap的相反,自己是Enemy,敌人是Player玩家

完成各个,默认的子管理器逻辑解析后,开始解析,敌人调用的,总代理CustomAgent脚本逻辑; 默认状态也是,设置默认的IDLE为true,其他为false即可;

然后,是之前调用的,默认映射Map、默认动作管理器、默认目标管理器、默认触发器、默认log管理器的调用、初始化重写

这是控制玩家游戏内,移动等业务逻辑,相关的脚本,设置角色控制器CharacterController、移动速度,默认是5,还有敌人代理的_enemyAgent声明; 以上,都在Start开始函数,完成初始化赋值即可;

Update更新函数,就是调用wasd,进行移动,然后K触发,调用敌人代理的INJURE受伤状态,为true即可

打好断点

运行,进入游戏

敲击K键盘,可以看到堆栈和debug结果,进入断点,是通过Goal目标,被加入到Performer计划队列,再完成触发的

重新打断点,再进入游戏,可以看到,点击K之后,是会调用BuildPlan接口,完成INJURE的当前目标,添加计划队列

调用,也就是通过状态的Set接口,一直触发到计划对应的Handler事件脚本逻辑,对应的NextAction接口,其中只包含一个Injure的Handler受伤事件

重新运行游戏,移动玩家,让两者距离缩短,触发器被触发了,可以看到,是敌人的Root脚本,调用了FrameFun帧函数; 继而调用到TriggerEyes触发器,让敌人面向玩家;

点击运行,可以看到,玩家对应的PlayerRoot脚本,也是通过FrameFun帧函数,调用了TriggerEyes触发器,让玩家面向敌人; 敌人和玩家,共享了同一触发器,逻辑正常;

运行游戏,两者面对面,表现正常