UE5(行为树)EQS实现随机巡逻

本文介绍了如何通过设置EQS的生成检测点、使用网格检测体和PathExist解决障碍物内部点的问题,以及如何调整行为树和NPC参数以实现更随机和大范围的巡逻。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.EQS随机巡逻简单来说就是将EQS的生成检测点平铺在地图中,通过测试将EQS障碍物的点去掉,并将在地图中的点使用的距离测试来评分即可。

创建一个网格检测体,将网格半径大小设置平铺地图,并将检测球之间的间距变得更大

设置完成后地图中的点有一部分会在障碍物内部,内部部分的点可以通过创建测试PathExist解决,将其设置为已过滤即可,将地图上其余的检测点设置测试Distance来创建得分 ,将Distance设置为得分,测试模式改为距离2D。

设置完成后,在障碍物内部的点为蓝色,在地图上平铺的点会以距离的远近设定一个分数。

设置完成后我们会发现AI会在两个点之间来回行走并不会随机选择点位,解决方法就是在在AI的行为树中,将Run EQS Query 的运行模式设置为 来自最佳的25%的单一随机项即可。

如果想要NPC的行走运行范围更大的话,可以将检测员设置为网格生成体,然后大量平铺在地图中,然后将NPC的网格体半径和间距都变小即可 完成!

<think>好的,用户需要关于UE5中敌人AI行为树实现方案,具体包括巡逻、攻击和僵持三个状态。首先,我需要回忆一下UE5行为树的基本结构和相关组件。根据引用内容,行为树由Root节点开始,通过任务、装饰器和服务来控制AI行为。用户提到的巡逻、攻击、僵持,应该对应不同的任务节点和状态切换。 首先,巡逻部分。通常,敌人需要按照预设的路径移动,可能使用“Move To”任务结合黑板中的目标点变量。需要设置一个循环,让AI在多个点之间移动。可能需要使用“Sequence”节点来组合移动和等待动作,或者在巡逻过程中检测玩家是否进入视野。 接下来是攻击部分。当玩家进入检测范围时,AI需要切换到攻击状态。这可以通过装饰器(Decorator)来检查黑板中的玩家键是否存在。攻击可能包括接近玩家、播放攻击动画等。需要确保在攻击状态下,AI停止巡逻,专注于攻击行为。 然后是僵持状态。僵持可能指AI在攻击后暂时停留或寻找掩体。这里可能需要一个延迟任务(Wait),或者设置一个条件,当玩家超出攻击范围时返回巡逻。需要处理状态之间的转换条件,比如玩家距离、血量等。 还需要考虑黑板的使用,比如存储玩家的引用、目标点、当前状态等。引用中提到AIController负责驱动行为树,因此需要在AI控制器中指定行为树,并可能添加感知组件来检测玩家。 可能的问题是如何处理多个状态之间的优先级和中断。例如,攻击状态应该优先于巡逻,当玩家进入视野时立即中断巡逻。这可能需要使用“Selector”节点,按优先级执行子节点。 另外,引用中的示例代码结构可能需要参考,比如根节点下使用Selector来管理不同行为分支。每个分支(巡逻、攻击、僵持)作为子节点,并带有相应的装饰器条件。 最后,用户可能需要具体的步骤或蓝图设置,比如如何创建行为树、设置黑板变量、配置任务节点等。需要确保回答结构清晰,分步骤说明,并引用相关文档或教程链接作为参考。</think>### UE5 敌人AI行为树实现方案(巡逻/攻击/僵持) #### 一、基础框架搭建 1. 创建行为树和黑板 - 新建`BT_EnemyAI`行为树 - 创建`BB_EnemyAI`黑板并添加关键变量: - `TargetPoint`(Vector)巡逻目标点 - `HasDetectedPlayer`(Bool)玩家检测状态 - `CombatState`(Enum)战斗状态枚举(Patrol/Attack/Stalemate) 2. 配置AI控制器 ```cpp // AI_EnemyController.cpp RunBehaviorTree(BT_EnemyAI); // 引用[2] ``` #### 二、巡逻系统实现 1. 创建巡逻任务序列 ``` Root (Selector) └─ Sequence [巡逻条件] ├─ FindPatrolPoint (黑板服务) ├─ MoveTo (移动到目标点) └─ Wait (停留3秒) ``` - 使用`Service`定期更新`TargetPoint`值 - 通过`Decorator`检查`HasDetectedPlayer == false` #### 三、战斗系统实现 1. 攻击行为分支 ``` └─ Sequence [攻击条件] ├─ MoveTo (接近玩家) ├─ PlayMontage (攻击动画) └─ SetCombatState (Attack) ``` - 使用`AI感知组件`检测玩家进入范围[^2] - 通过`Decorator`检查`HasDetectedPlayer == true` 2. 僵持状态处理 ``` └─ Selector [僵持条件] ├─ Wait (5) ├─ FindCoverPoint (寻找掩体) └─ ResetCombatState ``` - 触发条件:当玩家超出攻击范围且未被击杀时 - 使用`Service`监控玩家距离和血量 #### 四、状态转换逻辑 1. 优先级设置: - 攻击状态 > 僵持状态 > 巡逻状态 - 使用`Selector`节点实现优先级判断[^4] 2. 关键蓝图设置: ```python # 伪代码示例 if SensePlayer(): SetBBValue(HasDetectedPlayer, True) # 引用[3] elif CombatTimeout(): SetBBValue(CombatState, Stalemate) ``` #### 五、最佳实践建议 1. 使用`EQS系统`优化目标点选择 2. 为不同状态添加`视觉调试标识` 3. 在行为树中集成`AI感知系统`(听力/视觉) 4. 通过`GameplayTask`实现复杂战斗行为[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值