《UE5_C++多人TPS完整教程》学习笔记43 ——《P44 奔跑混合空间(Running Blending Space)》


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


文章目录

  • P44 奔跑混合空间(Running Blending Space)
  • 44.1 创建奔跑混合空间蓝图类
  • 44.2 制作 “Leaning” 动画
  • 44.3 Summary


P44 奔跑混合空间(Running Blending Space)

本节课我们将创建一个奔跑混合空间,这样我们的人物角色就会不会在进行移动时只是四处“滑动”(Slide Around)。
在这里插入图片描述


44.1 创建奔跑混合空间蓝图类

  1. 在虚幻引擎内容浏览器中打开 “/Game/Contents/Assets/Animation” 目录,搜索 “Jog”,可以看到我们已经有了向前、向后、向左、向右四个方向慢跑的动画资产,我们可以将其用于制作奔跑混合空间。
    在这里插入图片描述

  2. 在 “/Game/Contents/Blueprints/Character/Animation” 目录下以 “SK_EpicCharacter_Skeleton” 为骨骼创建混合空间蓝图类,命名为 “EquippedRun
    在这里插入图片描述

  3. 打开 “EquippedRun” 混合空间编辑器,在左侧 “资产详情”(Asset Details)面板的 “Axis Settings” 选项卡下展开 “水平坐标”(Horizontal Axis)和 “垂直坐标”(Vertical Axis)选项。在 “水平坐标”(Horizontal Axis)中设置 “名称”(Name)为 “YawOffset”,并设置 “最小轴值”(Minimum Axis Value)为 -180,“最大轴值”(Maximum Axis Value)为 180;同理在 “垂直坐标”(Vertical Axis)中设置 “名称”(Name)为 “Leaning”,并设置 “最小轴值”(Minimum Axis Value)为 -180,“最大轴值”(Maximum Axis Value)为 180。它们将作为奔跑混合空间的度量(Measures)。
    在这里插入图片描述

  4. 在中间视口面板下的坐标图中添加动画资产,坐标中心原点是我们向前奔跑的时刻,因此在右侧“资产浏览器”(Asset Browser)中拖拽向前慢跑的动画资产 “Jog_Fwd_Rifle” 的同时按下键盘 Shift 键,将其放置在坐标 (0.0, 0.0) 处生成采样点。
    请添加图片描述

    注意
    如果没有在拖拽动画资产的同时按下 Shift 键进行放置,生成的采样点无法精确的落在坐标中心远点上,可能会不符合我们的需求,可以点击采样点后在坐标图上方设置坐标轴值 “YawOffset” 和 “Leaning”。
    在这里插入图片描述在这里插入图片描述

  5. 分别将向左慢跑的动画资产 “Jog_Lft_Rifle” 和向右慢跑 “Jog_Rt_Rifle” 放置在 (-90.0, 0.0)(90.0, 0.0) 处,然后将向后慢跑的动画资产 “Jog_Bwd_Rifle” 放置在 (-180.0, 0.0)(180.0, 0.0) 处。
    在这里插入图片描述

  6. 这里的水平坐标轴 “YawOffset” 映射到人物角色奔跑方向的朝向,当我们按下 Ctrl 键并长按鼠标左键在水平坐标轴上进行拖动时,可以展示人物角色了向前、向后、向左、向右四个方向慢跑的动画资产。

44.2 制作 “Leaning” 动画

  1. 由于垂直坐标轴 “Leaning” 上并未添加任何动画资产,我们需要制作与之有关的动画,使得人物角色在奔跑时可以倾斜身体。在内容浏览器中拷贝(Duplicated)向前慢跑的动画资产 “Jog_Fwd_Rifle”,可以看到内容浏览器中生成了新的动画资产 “Jog_Fwd_Rifle1”。
    在这里插入图片描述

  2. 双击打开 “Jog_Fwd_Rifle1” 动画资产编辑器,在左侧骨骼树(Skeleton Tree)中选中骨骼根节点 “Root”,在视口中通过按下 W、S、A、D 键并配合鼠标拖动将摄像机视角移动到人物角色后方,在视口右上方点击 “选择并旋转对象”,将骨骼根节点 “Root” 向右旋转 20°,可以看到人物角色在向前慢跑时身体是向右倾斜的。
    在这里插入图片描述

  3. 在工具栏中点击 “+关键帧”(+Key),为动画添加关键帧,点击后可以看到下方时间轴中出现了名为 “root” 的 “Additive图层轨道”(Additive Layer Tracks)。
    在这里插入图片描述

  4. 在工具栏中 “创建资产”(Create Asset),选择 “创建动画”(Create Animation),选择 “当前动画”(Current Animation),再选择 “预览网格体”(Preview Mesh),随后在弹出的对话框中将动画资产命名为 “Jog_Fwd_Lean_R” 并保存到 “/Game/Contents/Assets/Animation” 目录下。
    在这里插入图片描述
    在这里插入图片描述

  5. 在内容浏览器中可以看到新创建的动画资产 “Jog_Fwd_Lean_R”,点击 “保存所有”(Save All),随后 “强制删除”(Force Delete)动画资产 “Jog_Fwd_Rifle1”。
    在这里插入图片描述

  6. 仿照步骤 1—6 的操作,创建向前向左倾斜慢跑的动画资产。
    在这里插入图片描述

  7. 回到 “EquippedRun” 混合空间编辑器,在右侧“资产浏览器”(Asset Browser)中按下键盘 Shift 键的同时分别拖拽 “Jog_Fwd_Lean_R” 和 “Jog_Fwd_Lean_L”,将其放置在坐标 (0.0, 180.0)(0.0, -180.0) 处生成采样点。随后在坐标轴中上下垂直移动光标,可以看到人物角色在向前跑动的同时身体可以发生倾斜。
    在这里插入图片描述

  8. 仿照步骤 1—6 操作,创建向右慢跑 “Jog_Rt_Rifle” 向右倾斜和向左倾斜的动画资产 “Jog_Rt_Lean_R” 和 “Jog_Rt_Lean_L”,并在坐标 (90.0, 180.0)(90.0, -180.0) 处生成采样点。
    在这里插入图片描述

  9. 仿照步骤 1—6 操作,创建向右慢跑 “Jog_Lt_Rifle” 向右倾斜和向左倾斜的动画资产 “Jog_Lt_Lean_R” 和 “Jog_Lt_Lean_L”,并在坐标 (-90.0, 180.0)(-90.0, -180.0) 处生成采样点。
    在这里插入图片描述

  10. 仿照步骤 1—6 操作,创建向右慢跑 “Jog_Bwd_Rifle” 向右倾斜和向左倾斜的动画资产 “Jog_Bwd_Lean_R” 和 “Jog_Bwd_Lean_L”,并在坐标 (180.0, 180.0)(-180.0, 180.0)(180.0, -180.0)(-180.0, 180.0) 处生成采样点。
    在这里插入图片描述


44.3 Summary

本节课我们创建了人物角色装备武器时的奔跑混合空间,为人物角色在不同方向和身体倾斜状态下奔跑提供了流畅的动画过渡。首先,在指定骨骼 “SK_EpicCharacter_Skeleton” 上创建了混合空间蓝图类 “EquippedRun”,并为其配置了水平坐标轴 “YawOffset” 和垂直坐标轴 “Leaning”,它们的最小轴值都设置为 -180,最大轴值都设置为 180。随后,将已有的向前“Jog_Fwd_Rifle”、向后 “Jog_Bwd_Rifle”、向左 “Jog_Lft_Rifle”、向右“Jog_Rt_Rifle” 慢跑动画资产精确放置到坐标轴的关键指定位置上生成采样点。
接着,我们重点制作了支持垂直坐标轴 “Leaning” 的倾斜奔跑动画,使得人物角色在奔跑时身体会有小幅度的倾斜。通过拷贝基础向前奔跑动画 “Jog_Fwd_Rifle”,在拷贝好的临时动画资产的编辑器中旋转骨骼根节点 “Root” 并添加关键帧,创建了向前向左倾 “Jog_Fwd_Lean_L” 和向右倾 “Jog_Fwd_Lean_R”的新动画资产,然后删除临时动画资产。此后,仿照上述步骤扩展应用到其他三个基础方向后、左、右,分别创建了它们对应的左右倾斜动画资产,并将这些新动画作为采样点添加到混合空间垂直坐标轴的两端。
最终完成的奔跑混合空间 “EquippedRun” 能根据 YawOffset” 和 “Leaning`” 值动态混合,使角色在 360° 任意方向奔跑时,身体也能平滑地向左右倾斜。
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93664.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorRT-LLM.V1.1.0rc1:Dockerfile.multi文件解读

一、TensorRT-LLM有三种安装方式,从简单到难 1.NGC上的预构建发布容器进行部署,见《tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B》。 2.通过pip进行部署。 3.从源头构建再部署,《TensorRT-LLM.V1.1.0rc0:在无 GitHub 访问权限的服务器上编…

UniApp 实现pdf上传和预览

一、上传1、html<template><button click"takeFile">pdf上传</button> </template>2、JStakeFile() {// #ifdef H5// H5端使用input方式选择文件const input document.createElement(input);input.type file;input.accept .pdf;input.onc…

《用Proxy解构前端壁垒:跨框架状态共享库的从零到优之路》

一个项目中同时出现React的函数式组件、Vue的模板语法、Angular的依赖注入时,数据在不同框架体系间的流转便成了开发者不得不面对的难题—状态管理,这个本就复杂的命题,在跨框架场景下更显棘手。而Proxy,作为JavaScript语言赋予开发者的“元编程利器”,正为打破这道壁垒提…

MOESI FSM的全路径测试用例

MOESI FSM的全路径测试用例摘要&#xff1a;本文首先提供一个UVM版本的测试序列&#xff08;基于SystemVerilog和UVM框架&#xff09;&#xff0c;设计为覆盖MOESI FSM的全路径&#xff1b;其次详细解释如何使用覆盖组&#xff08;covergroup&#xff09;来量化测试的覆盖率&am…

git仓库和分支的关系

1️⃣ 仓库分支&#xff08;Repository Branch&#xff09;每个 Git 仓库都有自己的分支结构。分支决定你当前仓库看到的代码版本。示例&#xff1a;仓库分支只是局部修改&#xff0c;项目分支才是全局管理所有仓库分支的概念。wifi_camera 仓库&#xff1a; - main - dev - fe…

Linux的基本操作

Linux 系统基础操作完整指南一、文件与目录操作1. 导航与查看pwd (Print Working Directory)作用&#xff1a;显示当前所在目录的完整路径示例&#xff1a;pwd → 输出 /home/user/documents使用场景&#xff1a;当你在多层目录中迷失时快速定位当前位置ls (List)常用选项&…

npm设置了镜像 pnpm还需要设置镜像吗

npm配置镜像后是否需要为pnpm单独设置镜像&#xff1f; 是的&#xff0c;即使您已经为npm设置了镜像源&#xff08;如淘宝镜像&#xff09;&#xff0c;仍然需要单独为pnpm配置镜像源。这是因为npm和pnpm是两个独立的包管理工具&#xff0c;它们的配置系统和环境变量是分离的&a…

Linux管道

预备知识&#xff1a;进程通信进程需要某种协同&#xff0c;协同的前提条件是通信。有些数据是用来通知就绪的&#xff0c;有些是单纯的传输数据&#xff0c;还有一些是控制相关信息。进程具有独立性&#xff0c;所以通信的成本可能稍微高一点&#xff1b;进程间通信前提是让不…

基于Spring Boot的快递物流仓库管理系统 商品库存管理系统

&#x1f525;作者&#xff1a;it毕设实战小研&#x1f525; &#x1f496;简介&#xff1a;java、微信小程序、安卓&#xff1b;定制开发&#xff0c;远程调试 代码讲解&#xff0c;文档指导&#xff0c;ppt制作&#x1f496; 精彩专栏推荐订阅&#xff1a;在下方专栏&#x1…

脚手架开发-Common封装基础通用工具类<基础工具类>

书接上文 java一个脚手架搭建_redission java脚手架-CSDN博客 以微服务为基础搭建一套脚手架开始前的介绍-CSDN博客 脚手架开发-准备配置-进行数据初始化-配置文件的准备-CSDN博客 脚手架开发-准备配置-配置文件的准备项目的一些中间件-CSDN博客 脚手架开发-Nacos集成-CSD…

软件系统运维常见问题

系统部署常见问题 环境配置、兼容性问题。生产与测试环境的操作系统、库版本、中间件版本不一致&#xff0c;运行环境软件版本不匹配。新旧版本代码/依赖不兼容。依赖缺失或冲突问题。后端包启动失败&#xff0c;提示类/方法/第三方依赖库找不到或者版本冲突。配置错误。系统启…

2021 IEEE【论文精读】用GAN让音频隐写术骗过AI检测器 - 对抗深度学习的音频信息隐藏

使用GAN生成音频隐写术的隐写载体 本文为个人阅读GAN音频隐写论文&#xff0c;部分内容注解&#xff0c;由于原文篇幅较长这里就不再一一粘贴&#xff0c;仅对原文部分内容做注解&#xff0c;仅供参考详情参考原文链接 原文链接&#xff1a;https://ieeexplore.ieee.org/abstra…

PWA技术》》渐进式Web应用 Push API 和 WebSocket 、webworker 、serviceworker

PWA # 可离线 # 高性能 # 无需安装 # 原生体验Manifest {"name": "天气助手", // 应用全名"short_name": "天气", // 短名称&#xff08;主屏幕显示&#xff09;"start_url": "/index.html&…

数据结构——栈和队列oj练习

225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 这一题需要我们充分理解队列和栈的特点。 队列&#xff1a;队头出数据&#xff0c;队尾入数据。 栈&#xff1a;栈顶出数据和入数据。 我们可以用两个队列实现栈&#xff0c;在这过程中&#xff0c;我们总要保持其…

Java基础 8.19

目录 1.局部内部类的使用 总结 1.局部内部类的使用 说明&#xff1a;局部内部类是定义在外部类的局部位置&#xff0c;比如方法中&#xff0c;并且有类名可以直接访问外部类的所有成员&#xff0c;包含私有的不能添加访问修饰符&#xff0c;因为它的地位就是一个局部变量。局…

从父类到子类:C++ 继承的奇妙旅程(2)

前言&#xff1a;各位代码航海家&#xff0c;欢迎回到C继承宇宙&#xff01;上回我们解锁了继承的「基础装备包」&#xff0c;成功驯服了public、protected和花式成员隐藏术。但——⚠️前方高能预警&#xff1a; 继承世界的暗流涌动远不止于此&#xff01;今天我们将勇闯三大神…

【图像算法 - 16】庖丁解牛:基于YOLO12与OpenCV的车辆部件级实例分割实战(附完整代码)

庖丁解牛&#xff1a;基于YOLO12与OpenCV的车辆部件级实例分割实战&#xff08;附完整代码&#xff09; 摘要&#xff1a; 告别“只见整车不见细节”&#xff01;本文将带您深入实战&#xff0c;利用YOLO12-seg训练实例分割模型&#xff0c;结合OpenCV的强大图像处理能力&…

ubuntu22.04配置远程桌面

文章目录前言检查桌面类型xorg远程桌面(xrdp)安装xrdpxrdp添加到ssl-certwayland远程桌面(gnome-remote-desktop)检查安装开启开启状况检查自动登录奇技淫巧前言 在windows上使用远程桌面服务&#xff0c;连接ubuntu主机的远程桌面 检查桌面类型 查看桌面类型、协议 echo $…

SQL Server 中子查询、临时表与 CTE 的选择与对比

在 SQL Server 的实际开发过程中&#xff0c;我们常常需要将复杂的查询逻辑分解为多个阶段进行处理。实现这一目标的常见手段有 子查询 (Subquery)、临时表 (Temporary Table) 和 CTE (Common Table Expression)。这三者在语法、执行效率以及可维护性方面各有优势与局限。如何选…

肖臻《区块链技术与应用》第20-22讲 - 以太坊难度调整、权益证明和智能合约

以太坊的“冰河时代”:详解难度调整算法与“难度炸弹” 摘要: 为了实现远快于比特币的十几秒出块速度,以太坊必须设计一套更为灵敏和复杂的挖矿难度调整算法。本文基于北京大学肖臻老师的公开课内容,深入剖析了以太坊独特的逐块难度调整机制。文章首先解释了其维持15秒平均…