创建瞄准偏移

角色使用瞄准偏移将武器瞄准鼠标或控制器的方向。

Choose your operating system:

Windows

macOS

Linux

本指南中,我们将创建一个 瞄准偏移 ,这是一种资源,其中存储了一系列可混合的姿势,用于帮助角色瞄准武器。我们将一个动画序列细分成瞄准偏移的可用姿势,获取玩家的鼠标倾斜/偏转位置,并用它来确定使用哪个混合姿势,这样角色就可以在鼠标的位置上移动和瞄准(有一些限制),如下面的例子所示。

完成以下步骤将得到与上述类似的角色:

1 - 创建瞄准姿势

在本步骤中,我们更新默认可操作角色,并创建瞄准偏移所需的所有姿势。

在本指南中,我们使用 蓝图第三人称模板(Blueprint Third Person Template) 项目,并将 动画初学者包(Animation Starter Pack) 添加到项目中:

AnimationAssetPack.png

你可以从Epic启动程序的 虚幻商城(Marketplace) 免费下载动画初学者包。

步骤

  1. 内容浏览器 Content/ThirdPersonBP/Blueprints 文件夹下,打开 第三人称游戏模式(ThirdPersonGameMode)

  2. 默认Pawn类(Default Pawn Class) 下,单击下拉菜单并选择 Ue4ASP_Character ,然后单击 保存(Save) 并关闭蓝图。

    Animations1.png

    我们将默认可操作角色更改为使用动画初学者包随附的角色。

  3. 内容浏览器 中,打开 Content/AnimStarterPack 文件夹,然后单击 新增(Add New) 并创建一个名为 AimPoses 的文件夹。

    AimOffset1.png

  4. Aim_Space_Hip 资源拖动到 AimPoses 文件夹上,并选择 复制(Copy)

    AimOffset2.png

    这是一个动画序列,包含一系列瞄准武器的动作,我们将把这些动作分解成各个姿势。

  5. AimPoses 文件夹中,选中 Aim_Space_Hip ,按 Ctrl+W 复制并将其命名为 Aim_Center

    AimOffset3.png

  6. 打开 Aim_Center 资源,单击播放功能按钮中的 暂停(Pause) 按钮,然后单击 ToFront 按钮。

    AimOffset4.png

  7. 右键单击 时间轴中的擦除条,然后选择 删除第1帧到第87帧(Remove from frame 1 to frame 87) 选项。

    AimOffset5.png

    现在我们有了一个单帧,其中包含一个可在瞄准偏移中使用的姿势。

  8. AimPoses 文件夹中,选中 Aim_Space_Hip ,按 Ctrl+W 复制并将其命名为 Aim_Center_Down

  9. 打开 Aim_Center_Down ,确保它在第 0 帧上,然后单击 ToNext 按钮转到第 20 帧。

    AimOffset9.png

    角色现在将在视口中向下瞄准,这就是用来向下瞄准的姿势。

  10. 右键单击 时间轴中的擦除条,然后选择 删除第0帧到第20帧(Remove frame 0 to frame 20) 选项。

    AimOffset10.png

    根据在擦除条上 右键单击 的位置,帧范围可能差一两帧,只要确保角色向下瞄准就好。

  11. 再次 右键单击 时间轴中的擦除条,然后选择 删除第1帧到第68帧(Remove from frame 1 to frame 68) 选项。

    AimOffset11.png

  12. AimPoses 文件夹中,选中 Aim_Space_Hip ,按 Ctrl+W 复制并将其命名为 Aim_Center_Up

  13. 打开 Aim_Center_Up ,确保它在第 0 帧上,然后单击 ToNext 按钮转到第 10 帧。

  14. 右键单击 时间轴中的擦除条,然后选择 删除第0帧到第10帧(Remove frame 0 to frame 10) 选项。

    AimOffset14.png

  15. 再次 右键单击 时间轴中的擦除条,然后选择 删除第1帧到第78帧(Remove from frame 1 to frame 78) 选项。

    AimOffset15.png

  16. 每次都 复制(Duplicate) Aim_Space_Hip 资源,并基于下表创建剩余的各个姿势。

    动画名称

    起始关键帧

    删除第1帧

    删除第2帧

    Aim_Left_Center

    30

    0 - 30

    1 - 57

    Aim_Left_Up

    40

    0 - 40

    1 - 48

    Aim_Left_Down

    50

    0 - 50

    1 - 37

    Aim_Right_Center

    60

    0 - 60

    1 - 27

    Aim_Right_Up

    70

    0 - 70

    1 - 17

    Aim_Right_Down

    80

    0 - 80

    1 - 8

    对于每个动画,确保从建议的 起始关键帧(Start At Keyframe) 帧开始,然后 右键单击 擦除条并 删除第1帧(Remove Frames 1) ,再次 右键单击 擦除条并 删除第2帧(Remove Frames 2) 。每个动画都应是个单独的帧,角色瞄准其对应名称的方向。创建各个动画后,你的 AimPoses 文件夹中每个瞄准方向都有几种姿势。

    AimOffset17.png

  17. 内容浏览器 中,按住 Shift 并选择各个瞄准姿势。

    AimOffset18.png

  18. 右键单击 并在 资源操作(Asset Actions) 下选择 通过属性矩阵批量编辑(Bulk Edit via Property Matrix) 选项。

    AimOffset19.png

  19. 属性矩阵(Property Matrix) 中,在 附加设置(Additive Settings) 下,将 附加动画类型(Additive Anim Type) 更改为 模型空间(Mesh Space)

    AimOffset20.png

    为了使动画与瞄准偏移兼容,必须将其附加动画类型设置为 模型空间(Mesh Space)

  20. 基础姿势类型(Base Pose Type) 更改为 选定动画帧(Selected animation frame) ,然后在 基础姿势动画(Base Pose Animation) 下,单击选取资源图标并选择 Idle_Rifle_Hip

    add_01.png

    该基础姿势类型将定义如何计算累加delta。

  21. 一旦完成此操作,返回 内容浏览器 并单击 全部保存(Save All) 按钮。

    AimOffset22.png

创建各个姿势资源后,下一步我们将利用这些姿势创建瞄准偏移。

2 - 创建瞄准偏移

在这一步中,我们将使用各个瞄准姿势创建瞄准偏移,该偏移会混合在各个姿势之间。

步骤

  1. Content/AnimStarterPack/UE4_Mannequin/Mesh 文件夹中, 右键单击 UE4_Mannequin 并选择 创建瞄准偏移(Create Aim Offset)

    AimOffset23.png

    这将基于该骨架创建瞄准偏移资源。

  2. 在瞄准偏移(Aim Offset)窗口(中央窗口)的 参数(Parameters) 下,输入如下所示的参数。

    AimOffset26.png

    X轴标签(X Axis Label) 设置为 Yaw ,将 Y轴标签(Y Axis Label) 设置为 Pitch ,然后将两个轴范围都设置为 -90到90(-90 to 90) ,并单击 应用参数更改(Apply Parameter Changes)

    瞄准偏移的工作原理非常类似于 混合空间 ,可用于基于参数混合我们的姿势。

  3. 资源浏览器 中搜索 Aim ,然后将 Aim_Center 动画拖动到图表中心位置上,如下所示。

    AimOffset27.png

  4. Aim_Center_Up 拖动到位置 1 ,将 Aim_Center_Down 拖动到位置 2 ,如下所示。

    AimOffset28.png

    你可以选择取消选中 启用提示文本显示(Enable Tooltip Display) 选项以关闭网格中的工具提示。

  5. Aim_Left_Center 拖动到位置 1 ,将 Aim_Right_Center 拖动到位置 2 ,如下所示。

    AimOffset29.png

  6. 添加 Aim_Left_Up (1)、 Aim_Right_Up (2)、 Aim_Left_Down (3)和 Aim_Right_Down (4)姿势以完成瞄准偏移。

    AimOffset30.png

  7. 资源详情(Asset Details) 面板中,将 附加设置(Additive Settings) 下的 预览基础姿势(Preview Base Pose) 选项设置为 Idle_Rifle_Hip

    Add01.png

    你可以通过在网格中移动鼠标来预览混合的姿势,视口网格体会根据你的鼠标位置更新它的姿势。

瞄准偏移现已创建,下一步我们将把它挂在我们的 动画蓝图 中使用,这样游戏进程就可以驱动混合。

3 - 实现瞄准偏移

在这一步中,我们将瞄准偏移添加到动画蓝图,并将其挂到我们现有的动画图表上。

步骤

  1. Content/AnimStarterPack 文件夹中,打开 UE4ASP_HeroTPP_AnimBlueprint 双击 我的蓝图(MyBlueprint) 面板中的 动画图表(AnimGraph)

    step3_01.png

  2. 资源浏览器(Asset Browser) 选项卡中,拖入瞄准偏移资源。

    step3_02.png

  3. 按如下所示连接瞄准偏移,然后 右键单击 Yaw Pitch 引脚,并 提升为变量(Promote to Variable) ,然后将它们命名为 Aim Yaw Aim Pitch

    step3_03.png

    每当玩家用鼠标瞄准并驱动瞄准偏移的姿势时,就会使用这两个变量。

  4. 我的蓝图(MyBlueprint) 面板,跳到 事件图表(EventGraph)

    step3_04.png

  5. 事件图表(EventGraph) 中,找到脚本移动(Movement)部分的 Sequence 节点。

    step3_05.png

    单击 Sequence 节点上的 添加引脚(Add pin) 按钮。

    step3_05b.png

  6. 我的蓝图(MyBlueprint) 面板,按住 Alt 并拖入 Aim Yaw Aim Pitch ,以连接到 Sequence 节点。

    step3_06.png

  7. Cast To Ue4ASP_Character 节点拖出一根引线,并添加 Get Control Rotation Get Actor Rotation 节点。

    step3_07.png

  8. Get Control Rotation 节点拖出一根引线,并添加 Delta(Rotator) 节点。

    step3_08.png

  9. Get Actor Rotation 连接到 Delta(Rotator) B Pin ,然后从 Return Value 拖出一根引线,添加一个 RInterp To 节点(并将连接从当前(Current)切换到目标(Target))。

    step3_09.png

    可按住 Ctrl 单击 当前(Current) 引脚,以将其连接拖动到 目标(Target) 引脚。

  10. RInterp To 节点的 当前(Current) 引脚拖出一根引线,并选择 Make Rotator

    step3_10.png

  11. 我的蓝图(MyBlueprint) 面板中,按住 Ctrl 并拖入 Aim Pitch Aim Yaw 变量,然后将它们连接到 Make Rotator 节点的 Pitch Yaw

    step3_11.png

  12. 移动(Movement) 脚本的开头,找到 Event Blueprint Update Animation 节点并将 Delta Time X 提升为名为 Time 的变量,然后按如下方式连接。

    step3_12.png

  13. 返回 RInterp To 节点,连接新 Time 变量,并将 Interp Speed 设置为 15

    step3_13.png

    我们将使用角色的旋转和玩家输入的旋转来创建一个新的旋转器,它将限制角色在某个方向上可以旋转的程度。

  14. RInterp To 节点拖出一根引线,添加一个 Break Rotator 以及 Pitch Yaw 夹角(Clamp Angle) ,并将最小/最大角度分别设置为 -90 90

    step3_14.png

  15. 夹角(Clamp Angle) Pitch 连接到 Aim Pitch ,并从 Yaw 连接到 Aim Yaw

    step3_15.png

    现在,计算角色旋转和玩家当前控制器旋转时要考虑到驱动瞄准偏移的Aim Yaw和Aim Pitch值,且这两个值被夹紧以防止角色在某个方向旋转过多。如不夹紧角度,角色的腿朝向前方的同时,角色的身体可能转一圈并朝向相反方向,这是我们需要避免出现的情况。

我们即将完成设置,下一步,我们将把所有的东西统合起来,测试角色的瞄准能力。

4 - 完成

在最后一节中,我们将更新角色蓝图,以更改控制器旋转的处理方式,并在测试前修复一些小问题。

步骤

  1. Content/AnimStarterPack 文件夹中,打开 Ue4ASP_Character 蓝图。

  2. 组件(Components) 窗口中单击 Ue4ASP_Character ,然后在 详情(Details) 中取消选中 使用控制器旋转Yaw(Use Controller Rotation Yaw)

    step4_04.png

    这将防止角色自动转向控制器的偏转位置。

  3. 组件(Components) 窗口中单击 胶囊体组件(CapsuleComponent) ,然后在 详情(Details) 面板中选中 在游戏中隐藏(Hidden in Game) 选项。

    HideCapsule.png

    这将在游戏进程中隐藏调试碰撞显示。

  4. 单击 我的蓝图(MyBlueprint) 中的 事件图表(EventGraph) ,然后找到 蹲伏(Crouching) 部分,将 InputAction Crouch 节点替换为 C 按键事件。

    step4_05.png

    这将删除窗口左上角编译按钮上的黄色预警信号,因为项目默认情况下没有蹲伏动作映射,我们将使用 C 按钮蹲伏(可以使用任何你想要的按键事件)。

  5. 编译(Compile) 保存(Save) ,然后关闭蓝图。

  6. 从关卡中移除 第三人称角色(ThirdPersonCharacter)

    DeleteCharacter.png

    这可确保我们使用分配到游戏模式的角色,而不是放置在关卡中的角色。

  7. 单击 运行(Play) 按钮在编辑器中运行。

最终结果

在编辑器中运行时,角色现在将会在静止状态下瞄准,并对鼠标的移动做出反应,指向鼠标的方向。有一些限制,用于防止当鼠标在角色背后时角色转身面朝后方,以及当角色慢跑时,移动鼠标会使角色躯干转向鼠标所指向的方向。

我们可以更进一步,允许角色瞄准一个方向并在该方向上播放射击动画,并且(或)允许角色在朝某个方向移动时或蹲伏(通过在现有动画上 叠加动画 来实现)时播放射击动画。或者以 骨架网格体套接字 为例,看看在角色可以瞄准的情况下,如何将武器附加到角色的手中。

欢迎帮助改进虚幻引擎文档!请告诉我们该如何更好地为您服务。
填写问卷调查
取消