RPC游戏案例【4. AI行为树】
RPC游戏案例【4. AI行为树】
鲸拓工作室AI行为树
本章工程文件为:RPG_Tutorial_Series_08,如遇问题可下载项目文件之后自行对照
巡逻
创建一个AI文件夹,然后创建一个BlackBoard,命名为BD_AI
再创建一个Behavior Tree,命名为BT_AI
再创建一个AI控制器的蓝图,命名为BP_AIController_Generic
编写蓝图如下,只需要让AI行为树Run起来
接下来将Blueprints下的BP_Dummy复制到AI目录下,并改名为BP_AI
打开它,应用上我们刚刚创建的AIControllerClass
同时打开Orient Rotation to Movement,让转向更平滑
回到BT_AI,添加巡逻行为树逻辑如下
其中自定义的BT_Task_PatrolRandomPoint任务,存放再AI/Tasks目录下,具体任务逻辑如下
来到场景中,放置一个NavMeshBoundsVolume,将这个导航体积覆盖所有地面,然后将BP_AI也放入场景中
点击运行,就会发现BP_AI开始在场景里巡逻了
但是运行的很僵硬,没有动作,所以我们再创建一个Animation Blueprint,命名为ABP_AI
从之前的ABP_RPGCharacter中复制运动逻辑过来
这样就能看到NPC在正常巡逻了
检测与追捕
首先打开DB_AI,创建一个Object变量
打开BP_AIController_Generic,新增一个AIPerception组件,并编写检测与追捕逻辑
这里用到的是AI视觉感知,其他的感知可以参考文档
虚幻引擎AI感知 | 虚幻引擎5.2文档 (unrealengine.com)
打开BT_AI,点击New Task里的BTTask_BlueprintBase,选中Task文件夹,新建一个BT_Task_ChaseTarget任务
然后再回到BT_AI,在原来的Patrol Sequence的左边再新建一个Chase Target Sequence序列,并调用BT_Task_ChaseTarget任务(先忽略蓝色的装饰器)
选中Chase Target Sequence,新建一个blackboard装饰器
Patrol Sequence也是一样新建一个blackboard装饰器
打开BP_ThirdPersonCharacter,新增一个AIPerceptionStimuliSource组件,并做如下配置
打开BP_AI,将人物的速度调整至450
最后打开项目目录的DefaultGame.ini,新增如下配置
意思就是找到代码中的AI模块中的视觉感知模块,将其中的将所有Pawns作为刺激源的功能关掉,这就能避免敌人也触发视觉感知组件。
1 | [/Script/AIModule.AISense_Sight] |
再运行项目,即可发现角色可以检测并追捕人物了(按逗号可以看到绿色的运算过程)
近身攻击
这一部分要实现的效果是,当NPC追捕到附近时,就发动攻击
首先打开BD_AI,创建一个bool的key,命名为inMeleeAttackRange
打开BT_AI,创建一个service,命名为BT_Service_GetDistanceToTarget
编写如下逻辑
然后打开BT_AI,将这个service应用上去
创建一个蓝图接口,命名为BPI_AI_BehaviorTrees
新增一个attack函数
然后打开BP_AI,实现这个函数(这个函数将会在行为树中被调用)
接着再创建一个新的Task,命名为BT_Task_AttackTarget,当追逐到指定距离内时,就触发攻击逻辑
将它应用到BT_AI中就可以了