当前位置: 首页 > news >正文

《UE5_C++多人TPS完整教程》学习笔记48 ——《P49 瞄准偏移(Aim Offset)》


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P49 瞄准偏移(Aim Offset)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Stephen Ulibarri 发布在 Udemy 上的课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。
在这里插入图片描述


文章目录

  • P49 瞄准偏移(Aim Offset)
  • 49.1 制作瞄准偏移的单帧动画
  • 49.2 使用属性矩阵批量编辑单帧动画
  • 49.3 创建瞄准偏移蓝图类
  • 49.4 Summary


P49 瞄准偏移(Aim Offset)

本节课我们将为人物角色创建瞄准偏移,它允许我们在移动鼠标时让人物角色瞄准各种方向。
在这里插入图片描述


49.1 制作瞄准偏移的单帧动画

  1. 在虚幻引擎内容浏览器的目录 “/Game/Contents/Blueprints/Character/Animation” 下新建文件夹 “AimOffsets”,用于存储朝各个方向瞄准的动画姿势。

  2. 复制动画资产 “Aim_Space_Hip” 到文件夹 “AimOffsets” 中,这个动画资产包含了人物角色多个方向武器瞄准混合动画姿势;接着,将复制好的副本重命名为 “AO_CC”。
    在这里插入图片描述

  3. 打开 “AO_CC” 动画序列编辑器,在资产编辑器中 移除帧1到帧87之间的帧,仅保留第 1 帧,这个单帧动画即人物角色面向前方水平瞄准的动画姿势。
    在这里插入图片描述

  4. 复制动画资产 “Aim_Space_Hip” 到文件夹 “AimOffsets” 中,将复制好的副本重命名为 “AO_CU”,在 “AO_CU” 动画序列编辑器的资产编辑器中 移除帧1到帧10之间的帧,接着再 移除帧1到帧77之间的帧,这个单帧动画即人物角色面向前方垂直向上瞄准的动画姿势。
    在这里插入图片描述在这里插入图片描述

  5. 然而,当我们在资产编辑器中播放该动画时,可以发现在虚幻引擎 5.0.3 中采用教学视频中的方法制作出的单帧动画 “AO_CU” 并不是真的只有一帧,而是包含了两帧,即人物角色面向前方垂直向上瞄准后又在动画的末尾面向前方水平瞄准,播放时相当鬼畜。如果在 “AO_CU” 的资产编辑器中尝试移除第 2 帧,依然无法得到仅有面向前方垂直向上瞄准的单帧动画。
    在这里插入图片描述

  6. 因此,笔者参考了《【UE5自制吃鸡版原神教程】06-aimOffset叠加瞄准指向动作.mp4》中的方法(笔者没有像教学视频中尝试在虚幻引擎 4.27 中进行动画序列剪辑),以获取真正的单帧动画。

  7. 在 “AimOffsets” 中新建文件夹 “HipAO”,将 “AO_CC” 移动到 “HipAO” 中。随后,重新复制 “Aim_Space_Hip” 到 “HipAO” 中,在副本的资产编辑器中定位到第 10 帧,然后再上方工具栏中选中 “创建资产”,接着选中 “创建动画”,然后选择 “当前姿势”,将动画资产命名为 “AO_CU”,保存在 “HipAO” 中。
    在这里插入图片描述

  8. 当我们在 “AO_CU” 资产编辑器中播放该动画时,可以发现它是真正的单帧动画,并不会在动画末尾包含人物角色面向前方水平瞄准的帧。
    在这里插入图片描述

  9. 仿照上述步骤,分别在副本 “Aim_Space_Hip” 的第 20 帧生成面向前方垂直向下瞄准的 “AO_CD”、第 30 帧生成面向左边水平瞄准的 “AO_LC”、第 40 帧生成面向左边垂直向上瞄准的 “AO_LU”、第 50 帧生成面向左边垂直向下瞄准的 “AO_LD”、第 60 帧生成面向右边水平瞄准的 “AO_RC”、第 70 帧生成面向右边垂直向上瞄准的 “AO_RU”、第 80 帧生成面向右边垂直向下瞄准的 “AO_RD”。
    在这里插入图片描述

  10. 在 “AimOffsets” 中新建文件夹 “AimAO”,复制动画资产 “Aim_Space_IronSights” 到 “AimAO” 中,然后通过上述方法获取人物角色的多个单帧动画,包括面向前方水平瞄准 “Aim_AO_CC” 、面向前方垂直向上瞄准的 “Aim_AO_CU”、面向前方垂直向下瞄准的 “Aim_AO_CD”、面向右边水平瞄准的 “Aim_AO_RC”、面向右边垂直向上瞄准的 “Aim_AO_RU”、面向右边垂直向下瞄准的 “Aim_AO_RD”、面向左边水平瞄准的 “Aim_AO_LC”、面向左边垂直向上瞄准的 “Aim_AO_LU”、面向左边垂直向下瞄准的 “Aim_AO_LD”。
    在这里插入图片描述

  11. 将生成的单帧动画全部保存。


49.2 使用属性矩阵批量编辑单帧动画

  1. 瞄准偏移的主要设计理念是,让动画叠加在现有的某 “基础动画” 上,通常就是 “向前瞄准”动画。在此基础上,我们就可以在瞄准偏移(Aim Offset)图表中实现各种叠加动画姿势(Additive animations),所需动画姿势的数量取决于人物角色需要的动作。因此,我们分别复制 “AO_CC” 和 “Aim_AO_CC”,将副本重命名为 “Zero_Pose” 和“Aim_Zero_Pose”,并将所有动画姿势保存。

  2. 选择 “HipAO” 中的九个单帧动画,单机鼠标右键,在弹出的菜单栏中选择 “资产操作”,接着选择 “通过属性矩阵进行批量编辑”。
    在这里插入图片描述

  3. 在属性矩阵窗口的 “网格” 面板全选单帧动画,随后在右侧 “显示” 面板中,将 “Additive Settings” 选项卡的 “Additive动画类型”(Additive Anim Type)设置为 “网格体空间”(Mesh Space),将 “基础姿势类型”(Base Pose Type) 设置为 “选择的动画帧”(Selected animation frame),将 “基础动画姿势” 设置为 “Zero_Pose”。
    在这里插入图片描述

  4. 同理,通过属性矩阵对 “AimAO” 中的九个单帧动画进行批量编辑,它们的 “基础动画姿势” 为 “Aim_Zero_Pose
    在这里插入图片描述

  5. 批量编辑完成后,将所有的单帧动画保存。


49.3 创建瞄准偏移蓝图类

  1. 在 “/Game/Contents/Blueprints/Character/Animation” 目录下以 “SK_EpicCharacter_Skeleton” 为骨骼创建瞄准偏移蓝图类 “HipAimOffset”。
    在这里插入图片描述

  2. 双击进入 “HipAimOffset” 动画编辑器,在左侧资产详情面板中,设置 “水平坐标” 的 “名称” 为 “Yaw”,设置其 “最小轴值” 为 -90.0,“最大轴值” 为 90.0;设置 “垂直坐标” 的 “名称” 为 “Pitch”,设置其 “最小轴值” 为 -90.0,“最大轴值” 为 90.0。接着,在 “附加设置”(ADDITIVE SETTINGS)中设置 “预览基础姿势”(Preview Base Pose)为 “Zero_Pose”。
    随后,将 “HipAO” 中的九个单帧动画放置在下方图表中对应的坐标上:AO_CC -> (0, 0), AO_CU -> (0, 90.0), AO_CD -> (0, -90.0)AO_RC -> (90.0, 0), AO_RU -> (90.0, 90.0), AO_RD -> (90.0, -90.0)AO_LC -> (-90.0, 0), AO_LU -> (-90.0, 90.0), AO_LD -> (-90.0, -90.0)
    在这里插入图片描述

  3. 在图表中长按 Ctrl 键并移动鼠标,可以观察到我们的人物角色能朝各个方向进行瞄准。
    在这里插入图片描述

  4. 同理,在 “/Game/Contents/Blueprints/Character/Animation” 目录下以 “SK_EpicCharacter_Skeleton” 为骨骼创建瞄准偏移蓝图类 “AimAimOffset”。双击进入 “AimAimOffset” 动画编辑器,在左侧资产详情面板中,设置 “水平坐标” 的 “名称” 为 “Yaw”,设置其 “最小轴值” 为 -90.0,“最大轴值” 为 90.0;设置 “垂直坐标” 的 “名称” 为 “Pitch”,设置其 “最小轴值” 为 -90.0,“最大轴值” 为 90.0。接着,在 “附加设置” 中设置 “预览基础姿势” 为 “Aim_Zero_Pose”。
    随后,将 “AimAO” 中的九个单帧动画放置在下方图表中对应的坐标上:Aim_AO_CC -> (0, 0), Aim_AO_CU -> (0, 90.0), Aim_AO_CD -> (0, -90.0)Aim_AO_RC -> (90.0, 0), Aim_AO_RU -> (90.0, 90.0), Aim_AO_RD -> (90.0, -90.0)Aim_AO_LC -> (-90.0, 0), Aim_AO_LU -> (-90.0, 90.0), Aim_AO_LD -> (-90.0, -90.0)
    在这里插入图片描述


49.4 Summary

本节课我们系统性地创建了用于人物角色瞄准的瞄准偏移(Aim Offset)系统。首先,我们依照教学视频,尝试通过剪辑基础动画资产 “Aim_Space_Hip” 和 “Aim_Space_IronSights”,以获取人物角色多个方向的单帧瞄准动画姿势,包括水平方向(左、中、右)和垂直方向(上、中、下)的组合,但是在虚幻引擎 5.0.3 中进行测试时我们发现这种剪辑的方法会导致生成的动画并非单帧,而是是两帧。为了解决这个问题,我们依照《【UE5自制吃鸡版原神教程】06-aimOffset叠加瞄准指向动作.mp4》 中的方法,即采用精确定位到帧、保存当前帧动画姿势的方法提取单帧瞄准动画姿势,并分别存储在 “ HipAO” 和 “AimAO” 文件夹中。
接着,我们分别复制 “AO_CC” 和 “Aim_AO_CC”,并重命名为 “Zero_Pose” 和 “Aim_Zero_Pose”,将它们作为 “基础姿势”。随后,使用虚幻引擎强大的属性矩阵批量编辑功能,高效地将所有单帧动画的附加设置统一配置为 “网格体空间” 附加类型,并正确设置其 “基础姿势” 。这一步确保了所有动画都能基于一个共同的参考姿势进行叠加混合,是构建有效瞄准偏移的关键。
然后,我们分别创建了 “HipAimOffset” 和 “AimAimOffset” 两个瞄准偏移蓝图,为它们配置了水平轴(名称 “Yaw”,范围 -90.0到 90.0)和垂直轴(名称 “Pitch”,范围 -90.0 到 90.0),并将处理好的单帧动画姿势精确放置在坐标网格对应的位置上,例如 “AO_CC” 在 (0, 0),“AO_RU” 在 (90.0, 90.0) 等。
最终构建的瞄准偏移系统使得人物角色能够根据 “Yaw” 和 “Pitch” 的输入值,动态、平滑地混合出朝任意方向瞄准的动画姿势,为后续实现人物角色精确的瞄准动画奠定了基础。
在这里插入图片描述



文章转载自:

http://JPW7ZK9x.hqsnt.cn
http://kR2h42Re.hqsnt.cn
http://f8bzFWtn.hqsnt.cn
http://JeRkkBXt.hqsnt.cn
http://i5kEtYsJ.hqsnt.cn
http://85iLR5j8.hqsnt.cn
http://rknqQzrq.hqsnt.cn
http://KH5vJbka.hqsnt.cn
http://rRcPtj96.hqsnt.cn
http://onWrMjAe.hqsnt.cn
http://rHkTwSL5.hqsnt.cn
http://awc3recq.hqsnt.cn
http://5t04PFid.hqsnt.cn
http://vBSJxQhZ.hqsnt.cn
http://xcXZ7RVa.hqsnt.cn
http://SK7qrZqv.hqsnt.cn
http://ts0PhZIe.hqsnt.cn
http://qLzp1FlX.hqsnt.cn
http://NRgwq7W2.hqsnt.cn
http://8yRewHEo.hqsnt.cn
http://FfivvITs.hqsnt.cn
http://2CGoFROG.hqsnt.cn
http://csuYV7wz.hqsnt.cn
http://8mDw7VMy.hqsnt.cn
http://2o5WAFf4.hqsnt.cn
http://SSO1XRBG.hqsnt.cn
http://TS8zuNW3.hqsnt.cn
http://zDlL1X9k.hqsnt.cn
http://5tOSZxvE.hqsnt.cn
http://rOEVSJi5.hqsnt.cn
http://www.dtcms.com/a/369901.html

相关文章:

  • 【数据结构】带哨兵位双向循环链表
  • Python基础之封装单继承
  • [数据结构] ArrayList(顺序表)与LinkedList(链表)
  • Fantasia3D:高质量文本到3D内容创建工具
  • Elasticsearch面试精讲 Day 10:搜索建议与自动补全
  • 【3D算法技术】blender中,在曲面上如何进行贴图?
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘mkdocs’问题
  • 【牛客刷题-剑指Offer】BM18 二维数组中的查找:一题四解,从暴力到最优
  • 推荐的Java服务环境:JDK17+ZGC(JDK 21的ZGC支持分代回收,性能更高)
  • [光学原理与应用-431]:非线性光学 - 能生成或改变激光波长的物质或元件有哪些?
  • 心路历程- Linux用户组的整理
  • 前端登录鉴权详解
  • CodeSandbox Desktop:零配置项目启动工具,实现项目环境隔离与Github无缝同步
  • Lua > Mac Mini M4安装openresty
  • SpringBootWeb 篇-深入了解 ThreadLocal 存在内存泄漏问题
  • Django 项目6:表单与认证系统
  • 【架构艺术】通过标准化事件解决变更检测能力的调度问题
  • Eureka与Nacos的区别-服务注册+配置管理
  • Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统
  • 基于 Gemini 的 CI/CD 自动化测评 API 集成实战教程
  • 基于定制开发开源AI智能名片S2B2C商城小程序的DMP平台离线文件上传功能优化研究
  • 友猫社区APP源码与小程序端部署详解
  • HJ65查找两个字符串a,b中的最长公共子串(medium,dp,进入题目后题目序号是HJ21)
  • 如何减少微型导轨表面破损情况?
  • Python中list()使用详解及注意事项
  • Patr1.第1-5章
  • Java线程通信
  • Linux匿名管道和命名管道以及共享内存
  • 【01背包问题变体】P1282 多米诺骨牌
  • 【C++】类和对象(三)