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

3.7 KiB
Raw Permalink Blame History

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

!Pasted image 20240415113753.png

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

!Pasted image 20240415113856.png

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

!Pasted image 20240415114114.png

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

!Pasted image 20240415114712.png

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

!Pasted image 20240415114840.png

!Pasted image 20240415114858.png

!Pasted image 20240415115028.png

!Pasted image 20240415115036.png

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

!Pasted image 20240415115332.png

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

!Pasted image 20240415115452.png

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

!Pasted image 20240415115210.png

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

!Pasted image 20240415120129.png

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

!Pasted image 20240415115820.png

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

!Pasted image 20240415120018.png

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

!Pasted image 20240415120249.png

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

!Pasted image 20240415120454.png

打好断点

!Pasted image 20240415120633.png

运行,进入游戏

!Pasted image 20240415120648.png

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

!Pasted image 20240415120713.png

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

!Pasted image 20240415120940.png

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

!Pasted image 20240415121208.png

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

!Pasted image 20240415121750.png

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

!Pasted image 20240415122027.png

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

!Pasted image 20240415122248.png