17_167~179EnemyBehavior
167 Makeing Enemies Move让敌人移动
AI Pawn NavigationAI棋子导航
创建导航网格

放置与场景中,按P键可以显示可以移动的区域

168 从mixamo上导入了Enemy的walk attack run的动画
169 Blendspaces混合空间
Blending Between Different Animations不同动画之间的混合
创建混合空间
Blend Space 1D

打开动画蓝图,来到idle状态中,删除之前的动画,拖入创建的混合空间

然后我们需要获取Enemy的移动速度
来到事件图表中,从目标获取character movement 并将其提升为变量

我们来到BlueprintThreadSafeUpdateAnimation 函数中,接着上次设置的内容
创建一个Property Access,然后获取到character movement中的velocity,并获取其中的Vector Length XY,赋值给GroundSpeed

最后返回这里,将GroundSpeed,赋值给混合空间的参数

编译之后,在游戏中就可以看到Enemy跑起来了
在Enemy蓝图中,设置如下
取消"使用控制器旋转Yaw"

选中


或者在C++中设置
在Enemy的构造函数中设置

最后调整一下walk的速度 和混合空间中的值,使其与动画相符,不会滑步
170 Patrol Targets巡逻目标
Adding patrol Targets for the Enemy为敌方增加巡逻目标
高级的文章:https://zhuanlan.zhihu.com/p/390375061
创建新变量,用于存储当前目标和巡逻目标组


编译代码之后,回到enemy蓝图中,删除之前的节点

然后在地图上添加 Target Point
设置地图上Enemy实例中的AI Navigation
运行一下,Enemy就可以向Target移动过去了
171 Selecting partol Targets选择部分目标
Patrolling to Diferent Targets巡逻到不同的目标
添加多个点
然后在Tick方法中添加循环判断,让Enemy在多个点中跑起来


他在视频中提到了,如何避免Enemy多次随到同一个目标,他是将多个目标添加进入了一个数组
然后执行这个数组
我的思路是 生成序号,让moveto执行这个序号,避免重复
172 Patrol Wait Time巡逻等待时间
Adding a wait time between patrol points在巡逻点之间增加一个等待时间
重新调整一下代码
新建MoveToTarget方法,专门用来放置moveto的功能

替换掉beginplay和tick里面的代码
需要用到FTimerHandle 计时器
创建一个计时器和计时器调用的方法void PatrolTimerFinished()
同时创建一个最大时间和最小时间用于随机
在beginplay中,调用方法
然后将其他地方的movetotarget方法 替换这个
调试代码,进入有游戏,发现enemy会到达目标点后进入等待
173 Pawn Sensing Componentpawn感应组件
Chasing the character when seen被看到时追赶角色
创建组件和初始化
创建方法
174 Enemy States
Patrolling, Chasing , and Attacking巡逻、追捕和攻击
给敌人添加状态
新建状态的变量,初始化为巡逻状态
给tick里面的方法添加上状态判断
在Seenpawn方法里面,加上跟踪玩家的方法
175 Enemies Losing Interest敌人失去兴趣
back to patrolling 回归巡逻
修改CheckCombatTarget方法
当角色不在距离内,则降低移动速度,向巡逻点移动

176 Attack Radius攻击半径
tering the Attacking state进入攻击状态

177 Agro When Hit被攻击时的敌人
Let's Anger the Enemy让我们激怒敌人

178Arming the enemy武装敌人
getting more weapons获得更多的武器
ue5:修改静态网格体中心点坐标位置BV1v3411m7qv
将导入的模型修改中心点位置后,添加为新的武器

