学习UE4动画蓝图:使用AimOffset(瞄准偏移)

目标

目标是在上一篇博客《学习UE4动画蓝图:创建一个射击姿势并使用》的基础上,让射击姿势可以瞄准朝向相机的方向。
学习过程中主要参考了《创建瞄准偏移 | Unreal Engine Documentation》。

1. 创建9方向的单帧动画序列

我之前的一个误区是:瞄准偏移由静态(指单帧)的姿势混合,但是当我试图将姿势拖入新建的瞄准偏移时发现被提示是个无效的资源类型:
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第1张图片
也就是说,瞄准偏移是由动态(指多帧)的动画序列混合而成的,其本身也可以是动态的。这样看来它和2维的混合空间就类似了,只不过区别在于它要求动画序列是Additive的(即表示一个增量),否则拖入动画序列时会被提示:
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第2张图片
不过,我目前的这个资源(Aim_Space_Ironsights动画序列)是一个瞄准方向只对应一帧,因此用来混合的动画都是单帧的(即虽然只有一帧,但资源类型不是姿势,而是动画序列)。

下面创建9个方向的单帧动画:

1.1 复制

先将Aim_Space_Ironsights复制出9份来,并分别以方向来命名:
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第3张图片

1.2 保留需要的姿势帧删除其他所有帧

各个方向的帧在Aim_Space_Ironsights中在:

方向
Aim_Center_Center 0
Aim_Center_Up 10
Aim_Center_Down 20
Aim_Left_Center 30
Aim_Left_Up 40
Aim_Left_Down 50
Aim_Right_Center 60
Aim_Right_Up 70
Aim_Right_Down 80

例如对于Aim_Center_Down,所做的操作如下:
1) 打开Aim_Center_Down
2) 选择到第20帧
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第4张图片
3) 右键,点移除帧0到帧20之间的帧
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第5张图片
4) 回到0帧,右键点移除帧1到帧68之间的帧
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第6张图片

1.3 批量设置属性

接下来需要设置 Additive 动画相关的属性。一共有九个,批量设置会更快。

选中9个动画,右键选择通过属性矩阵进行批量编辑
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第7张图片
随后编辑属性:

  • 附加动画类型(Additive Anim Type) 更改为 模型空间(Mesh Space)
  • 基础姿势类型(Base Pose Type) 更改为 选定动画帧(Selected animation frame)
  • 基础姿势动画(Base Pose Animation)选择 ThirdPersonIdle,记住现在的选择。

学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第8张图片

2.创建瞄准偏移资源

2.1创建

右键骨架选择创建目标偏移(我翻译成瞄准偏移)。这将从这个骨架创建一个瞄准偏移资源。
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第9张图片
命名为ShootingAimOffset
在这里插入图片描述

2.2编辑

双击打开资源,在细节面板中设置水平和垂直轴的名字与值范围:
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第10张图片
将之前做的9个单帧动画拖入到对应位置:
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第11张图片

2.3预览

资源详情(Asset Details) 面板中,将 附加设置(Additive Settings) 下的预览基础姿势(Preview Base Pose) 选项设置为 ThirdPersonIdle
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第12张图片
可预览:

3. 动画蓝图的 AnimGraph

上一篇《学习UE4动画蓝图:创建一个射击姿势并使用》中的设计姿势节点(Aim_Center_Center : Pose_0)将由ShootingAimOffset取代(只要将瞄准偏移资源拖入就可以创建节点):
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第13张图片
另外需要注意的是:

  • 其输入的姿势应该是ThirdPersonIdle
  • Yaw和Pitch的值是变量,将会在之后的事件图表中设置

4. 动画蓝图的 事件图表

在事件图表中添加设置瞄准角度的内容:
学习UE4动画蓝图:使用AimOffset(瞄准偏移)_第14张图片
需要注意的是:

  • 旋转的偏移是由GetControlRotationGetActorRotation通过Delta函数计算得来
  • 获得的角度需要Clamp-9090之间。

效果

你可能感兴趣的:(UE4)