在上一篇基础上(UE4 回合游戏项目 13- 生成敌人)继续完成添加敌人攻击的功能
效果:
步骤:
我们需要在gameMode1中的开启新一次攻击前,添加敌人攻击的功能
首先需要获得敌人的索引
1.在战斗场景的从类生成AI这个节点中可以输出生成的敌人这个Pawn类型的对象
我可以将这些对象存下来,通过建立一个数组变量,命名为生成的敌人总数量,变量类型为roleCategory
将输出的Pawn类转化为roleCategory(父类转为子类)
选中该节点点击鼠标右键选择将该节点进行纯类型转换:
然后将转换后的roleCategory对象加入到生成的敌人总数量这个数组中
接下来我们就需要将生成的敌人总数量这个数组传递给gameMode1
2.在gameMode1中创建一个自定义事件,命名为游戏开始,将事件开始运行进行替换
在战斗场景中获取gameMode1
将其转为纯类型,然后调用gameMode1中的游戏开始这个自定义事件
在gameMode1中添加一个输入,输入值就是敌人总数量
命名为敌人角色总数组,类型为roleCategory、数组
编译后,在战斗场景中输入生成的敌人总数量这个变量
然后在gameMode1中将这个数组输出
命名为生成的所有敌人,这样就在gameMode1中获得了战斗场景中的生成的所有敌人
现在有了这些敌人的引用后就可以添加敌人攻击的动画了
3.在gameMode1中先删除如下两个节点
备注一下玩家攻击的节点逻辑
玩家攻击的逻辑写完,下面开始敌人攻击的逻辑
在gameMode1中新建一个节点名为敌人攻击
在玩家攻击逻辑的最后添加敌人攻击的自定义事件
添加如下节点,从数组中获取当前是第几个敌人攻击
设置当前敌人的位置和旋转
让敌人走到玩家面前
敌人进行攻击:攻击者是当前的敌人,攻击对象是玩家
4.在enemy1中添加轮到攻击接口
此时在左侧就会出现普通攻击
双击enemy1中事件图表中的死亡或者收到伤害事件节点来打开enemy1_AnimBP
在enemy1_AnimBP中双击打开Attack_C
是一个敌人攻击的动画
但是动画播放速率稍微有点慢,于是将比率范围调为1.5
右键点击浏览至资源
对Attack_C这个动画资源创建个动画蒙太奇
命名为敌人1普通攻击
5.双击打开它,还是要给它添加一个通知
将时间轴移至大概如下图的位置
新建通知
命名为普通攻击
6.现在要创建敌人进行普通攻击的函数
在enemy1_AnimBP中添加一个新函数
命名为敌人1普通攻击
函数需要将攻击的人的变量传递进来
还要输出蒙太奇播放的时间
将攻击对象提升为变量
变量命名为攻击对象
添加蒙太奇播放节点,将该节点返回的播放时间传递给返回节点
播放的资源为敌人1普通攻击
在事件图表中普通攻击的通知事件
将尝试获取Pawn拥有者输出的值提升为变量,变量命名为当前人物
通过如下节点实现当敌人手抬起的那一刻对玩家造成伤害
7.回到enemy1的普通攻击接口中,添加敌人1普通攻击的调用
8.回到gameMode1,让敌人攻击完回到原位置
当 当前的敌人攻击结束后,让索引+1
判断所有敌人是否全部攻击完
9.添加变量,名为当前的回合数,类型为整数
当全部敌人反击完,让当前的回合数这个变量+1
让第几个攻击的角色这个变量值归0,因为重新开始了一个回合
如果所有的敌人没有攻击完就继续攻击直到所有的敌人全部攻击完
10.还需要加一个判断,就是如果当前敌人如果第一个回合就把第一个敌人击败了,那么它肯定就不能再进行攻击,因此需要加一个判断,来判断当前敌人是否已经死亡
如果没有死亡就继续攻击
如果已经死亡就跳到下一个攻击的角色
当一个回合结束再次创建战斗菜单
可以再打印下当前的回合数
11.在战斗刚开始的时候设置第几个攻击的角色和当前的回合数这两个变量都设为0
打开战斗场景,在战斗开始之前将生成的敌人总数量这个数组清空
还需要清除的是当前类型的敌人数量、当前生成的类型数量、敌人生成位置的索引
此时,我们攻击一个敌人,所有敌人都会轮番反击,效果如下:
敌人没有播放走路的动画是因为在enemy1_AnimBP中没有添加速度
添加速度后,效果如开头所示