UE4学习笔记 FPS游戏制作22 机器人身体瞄准玩家

发布于:2025-03-27 ⋅ 阅读:(27) ⋅ 点赞:(0)

现在的问题

机器人寻路完成,只会朝一个固定的方向射击,玩家稍微移动一下,就打不到玩家了

首先修改射击问题

获取正确的射击方向

目前玩家和机器人之间只有射击开始点不同,射击方向都是身体正前方,机器人正确的射击方向应该是 敌人的位置-自己的位置所获得的向量方向,应该使用多态让玩家和机器人的射击方向不同
在Shooter中定义一个新方法GetShootDirection
然后在玩家的FppShooter中重写,获取正前方的方向
在这里插入图片描述
在机器人的RobotShooter里重写
从黑板里获取敌人的对象,然后获取位置,和自己的位置相减,获取方向
这个向量好像没有被归一化
在这里插入图片描述
在这里插入图片描述

修改枪里的调用

机器人只用Rifle,所以只改Rifle
在这里插入图片描述

AimOffset

AimOffset是虚幻提供的专门用来处理瞄准动画的蓝图,可以混合不同的瞄准方向

处理动画片段

我们需要为不同的瞄准方向准备好动作,分辨是前,上,下,左,右,左上,右上,左下,右下一共九个方向
这些动画片段需要处理后才能在AimOffse里使用
修改单个动画
打开一个动画片段,在付加设置里修改
1 Addtive动画类型 = 网格体空间
2 基础姿势类型=Idle
在这里插入图片描述
批量操作
在资源列表里选择所有要修改的动画,右键/资产操作/通过属性矩阵进行批量编辑
在这里插入图片描述
同样修改Additive为网格体空间,然后指定一个基础姿势,点后边的数组标志可以进行搜索
在这里插入图片描述

创建AimOffset

右键/动画/瞄准偏移 来新建一个AimOffset
左侧属性列表里,修改一下坐标轴的名字和值,轴值是90度是因为动画是90度的姿势
在这里插入图片描述
然后把各个偏倚动画拖到对应的位置,forward动画在中间,注意没有经过上一步处理的动画是拖不进来的
在这里插入图片描述

使用AimOffset

将创建好的AimOffset添加到动画蓝图里
在这里插入图片描述
添加一个纯函数GetAimOffset来获取偏移量
就是用自己的方向减去射击的方向,获取到差,然后拆分这个差值方向,Y轴就是俯仰角度,Z轴就是旋转角度
注意点:
1GetShootDirection方法是我们上边定义的获取射击方向的函数,使用从X向量旋转来获取这个方向的前方
2两个方向做差要用“差量(旋转体) Delta(Rotator)”节点,不能直接相减
在这里插入图片描述
此时运行,发现敌人可以用枪口指着我们,其实还有问题,我们走到机器人背后,他不会转身
在这里插入图片描述

使用BlandSpace代替AimOffset

步骤是一样的,只有两个地方不一样
1 动画的additivate动画类型要选择局部空间而不是网格体空间
在这里插入图片描述
2 动画蓝图里额外需要一个ApplyAdditive节点
在这里插入图片描述