基础追击敌人
基本内容
aicontroller 大脑
character 身体
BT行为树 控制
BB黑板 大脑信息 桥梁
BTD 装饰器 if语句
BTT 任务节点
BTS 更新 获得key
接口 函数集合
初始化角色
1.基本配置 创建一个什么都没有的character
名字为BP_Enemy_Base
创建一个子类继承,名字是BP_Enemy_FDragon
随便你怎么命名
蓝图里只有角色模型和动画蓝图(动画蓝图怎么创建,不在ai行为树内容范围,后续会具体讲解)
在关卡中添加NavMeshBoundsVolume
如果是开放世界得把仅在导航触发器打开,因为可以从角色周围创建导航
如果是体量小的关卡,可以关闭(由于题主在开放世界项目下进行测试,使得出现问题)
2.AI行为树 功能实现和应用
ChasePlayer
创建行为树,黑板,AIController
黑板中创建AttackTarget的Key,并把类型设置为Object下的Actor
行为树中引出moveto 设置 key 为AttackTarget
然后从AIController将AttackTarget添加进黑板中
Attack
在character中创建Attack事件
事件分发器目的是确保动画播放完毕,也可以在蒙太奇设置一些点来实现
创建BTT
将character的attack事件引入到BTT DefaultAttack
记得在character加入aicontroller
focus target
但角色位于敌人后面时,敌人并没有根据角色位置发生变化而产生相应的行为
因此创建BTT_focustarget,设置敌人focustarget
clear target
但远离敌人时,敌人会发生一个方向朝向角色的bug
因此创建BTT_cleartarget
在character中选择UseContollerDesiredRotation
同时要理清行为树sequence的顺序,来确保敌人行为合理和正常
Equipweapon
根据自身需要可以参加多个BTT
例如遇见角色时,敌人会拔出剑来攻击敌人
因此创建BTT_equipweapon来实现相应逻辑
但是如果本身有剑呢
所以要创建一个装饰器,即if语句BTD_isEquipingWeapon
Bool值设置在character上的equipweapon事件中
BTD_isEquipingWeapon
来判断当前情况,要获得bool值,因此需要再character中取得
然后在BTD中放进装饰器
selector
因为装饰器的出现,就得启用selector
来进行逻辑判断,装备武器时干嘛,没装备武器时干嘛
在装饰器上可以根据自己逻辑来判断是否要反转condition
运行时,敌人会变出武器来攻击角色,由于没设置动画,剑会立马出现
下一篇会完善此敌人,并创建巡逻敌人
完善部分是对敌人的合理化,也是加加功能啥的
创建巡逻敌人,需要创建路线,将路线传入行为树
文章会陆续完善
如果文章出现错误,可在评论区指出,或者私信来共同解决