接上一篇 Unreal5 第三人称射击游戏 角色基础制作1
角色蹲伏效果
上面是需要的操作映射,蹲伏实现,首先要开启相应功能,你需要在角色移动组件上面开启可蹲伏
蹲伏还有一些其它设置,比如蹲下角色高度,蹲下以后行走的速度
中英文截图
这里我设置的移动速度,蹲伏时可以走出平台,就为了防止在物体上面出现无法跳下去的问题。
接下来我们要实现蹲伏逻辑
获取事件输入,然后判断当前是否处于蹲伏,这个是在角色移动插件里面获得,然后设置相反的动作,实现点击切换蹲伏的状态,然后将状态设置给角色类上面。
接下来制作蹲伏混合空间1D
混合空间制作完成后,基础部分已经实现,接下来我们将实现动画混合,打开动画蓝图
进入之前实现的站立的基础状态里面,在这里实现对动作的混合
接下来把制作的混合空间拖入,然后使用节点,按buer混合姿势,我们可以通过一个布尔变量,来切换站立姿势或者蹲伏姿势。
按照布尔变量切换使用蹲伏的动作还是正常的动作,我们需要一个布尔值,所以创建一个布尔变量
让混合姿势节点通过这个值进行切换
结果就这样了,接下来,我们只需要在角色蓝图内,去修改这个值即可,接下来在之前设置的是否蹲伏那里,然后获取动画蓝图节点,蹲伏状态下设置变量为true,解除蹲伏则设置回false
我看了一下,如果你在蹲伏状态下,然后点击解除蹲伏,会出现动画恢复了,其实没有接触蹲伏状态,我直接用回调解决这个问题来处理动画
我们发现这是蹲伏以后,相机焦点还是原来的位置,但是角色已经蹲下了,所以,我们需要使用时间轴实现角色蹲下了以后,相机也会跟着向下靠拢。
时间轴创建
接下来要制作切换动画,首先创建一个时间轴
在时间轴里面创建一个浮点型轨道
命好名称,然后我们要制作0.3s的过渡,所以创建了两个点,一个是时间是0,值也是0
另一个是时间0.3 值为1
左上两个按钮是可以显示整个时间轴,而不需要我们自己拖拽显示全部。
最后记得将长度修改为设置的时间轴的总长度,要不然虽然你的数值变换完成了,但是你的动画会有很大空闲。
右键选择第一个关键字,选择自动,将会自动插值
Play 直接播放,如果你当前播放了一段,会直接在播放的点继续播放
Play from Start 直接从初始位置播放
Stop 暂停序列帧更新
Reverse 反向播放
Reverse from End 从结束位置反向播放
Set New Time 可以设置一个新的位置 New TIme 就是一个你自己定义的时间位置
Update 序列帧更新时会每一帧都触发
Finished 序列帧结束时触发
Direction 获取是正向播放还是反向播放 可以switch判断
Half Height 我个人定义的名称,可以获取到当前的序列帧的值
实现相机偏移
我们要实现的是对插槽偏移的z轴进行修改
那么把弹簧臂组件从左侧拖入蓝图中,首先获取插槽偏移的值输入Socket Offset是插槽偏移的英文。
先获取然后再设置,因为我们只需要设置z轴,其它两个轴直接直连,保持原来的值
接下来,我们使用插值节点,来去实现值的生成,Alpha为0时,值就是A Alpha为1时,就是用的b,中间就是两个值插值出来的,
具体算法就是(b - a) * Alpha + a
这样就实现了整个蹲伏的逻辑
做到这里,我将版本更新到了5.1,使用上了ue5.1的增强输入功能,unreal 5.1 增强输入实现请按需修改。
瞄准偏移功能
瞄准偏移是角色的头部会跟随着相机的朝向而修改朝向,让它们都朝向同一个方向。这个功能实现我们会用到附加动画。
使用附加动画实现,我们要将所有动画基于正向朝向进行偏移,这里我使用的一组是红框框出来的
如果大家没有动画,可以去商店找免费动画包。
接下来实现基于正向朝向的偏移实现,如何批量设置,我们需要全选资源,然后再资产操作里面找到通过属性矩阵进行批量编辑
接下来在窗口中全选资产,在右侧additiveSettings里面设置基础姿势动画为正面朝向的动画,实现了动画基于正向动画的偏移
如果你想单个的设置,可以在动画页面找到附加设置
接着创建一个瞄准偏移资产,用于制作偏移动画,瞄准偏移英文为Aim Offset,我们可以给资产增加前缀AO
选择好相应的骨骼,进入,会发现,它和混合空间1D最大的区别就在于,它有两个坐标轴的,
接着给两个坐标轴命名,这里水平取名Yaw,垂直坐标取名Pitch,这个名字取自欧拉角,不知道朋友学一下。水平和垂直范围都是-90到90度,也就是头部可以旋转的范围是180度。
设置完成后,会发现场景里面的角色消失了,附加动画,简而言之就是需要附加到其它动画上面才有用,所以我们需要修改它的预览基础动画,选一个idle动画看看效果。
到这里,附加动画就算做完了,接下来,我们需要做的就是在动画蓝图里面实现相应的功能,实现思路是通过获取到角色的朝向和相机的朝向,根据得到的夹角,进行对附加动画的偏移设置。
首先求出来两个夹角,然后限制一下范围
为了解决头部出现瞬移的情况,我们使用插值补间动画过渡,R插值到 这个节点
我们可以定义当前 current 以及目标 target,然后设置时间 DeltaTime为间隔时间,是每帧的间隔时间, Interp Speed 为过渡的速度,0为无过渡,值越大越平滑。
上图创建了两个变量 Pitch 和Yaw 用于存储当前偏移量,也是作为设置附加动画的值,最后,我们还需要吧插值的结果赋值给这两个变量,这两个变量就实现了针对于相机和角色的偏移,而跟随偏移。
上面我们在动画蓝图的事件图表中,实现了瞄准偏移节点的值的获取。
最后,我们需要将制作的瞄准偏移动画加入到基础动画流程中,实现动画的混合,赋值即可
还有一个问题,前面我做的瞄准偏移节点竟然做成了混合空间节点,结果就出问题了,大家也要注意。
这样制作完成以后,会发现,相机移动到角色正面时,角色始终不会看向相机,接下来,我们实现一下相机移动到正面,角色的脸朝向前方。
经过查看发现,相机在角色正前方的两个Z值夹角差值为-90到-180度 和 90到180度,那么我们直接取它的绝对值,用于判断相机是否在正前方
获得了布尔变量,我们可以通过分支进行判断,如果不大于100,则还是按照之前默认处理,如果相机在正前方,那么要让脸朝向前方,这个实现的思路就是,让当前的Yaw值也插值到0(0就是Yaw左右方向默认朝向前方的值)。如果需要Pitch值,也可以这么处理。
但是,在韩国游戏里面,他们的处理方式,相机在前方时,角色脸会朝向相机,我接下来实现一下。
首先,进行一个布尔判断,就是相机和朝向差值到了多少以后,切换为脸部朝向相机。我们只需要判断插值的Yaw即可
在正面时,我们要求出相机屁股的朝向,我通过打印发现,相机转向的范围为 Yaw 是0到360度,Pitch 是 0到90 和270到360。Yaw的反向值可以通过加180求出,Pitch可以取负值或者用360减去当前值。
最后,我们使用这个反向旋转体和角色旋转体求差值,继续之前的步骤即可,下面是当前功能的全部代码。