UE5 动画蓝图

文章目录

  • 一、State Machines
  • 二、Blend Spaces
  • 三、Aim Offset
  • 四、Montage

在这里插入图片描述

初步介绍

Unreal Engine 5 Tutorial - Animation Blueprint Part 1: State Machines (youtube.com)
Unreal Engine 5 Tutorial - Animation Blueprint Part 2: Blend Spaces (youtube.com)
Unreal Engine 5 Tutorial - Animation Blueprint Part 3: Aim Offsets (youtube.com)
Unreal Engine 5 Tutorial - Animation Blueprint Part 4: Montages (youtube.com)

这里我们使用虚幻争霸中的资产实现动画效果,将该资产导入到工程中,创建一个BP_Character,实现基本的人物运动和相机运动系统

一、State Machines

首先我们将 狂 的骨骼网格体导入 BP_Character 中

然后创建一个 Animation Blueprint,命名为 ABP_Character,进入 Event Graph,首先进行 Animation 初始化,在这里创建两个变量方便我们获取 Character 的信息

同时在这里我们可以创建一个 Vector 变量去保存 Character 的速度,命名为 CurrentVelocity

进入 AnimGraph,我们创建一个 State Machine 并命名为 Locomotion,然后进入 Locomotion 之中创建两个 State ,分别命名为 Idle 和 Walk,将他们连接起来

进入 Idle 中,拖入 Idle 的动画,然后开启 Loop Animation

进入 Walk 中 ,同样的操作

然后在两个判断中判断速度是否为 0, 如果为 0 则从 Walk 转到 Idle,反之则从 Idle 转到 Walk;

这里不知道为什么会有阴影,预测是材质问题,这里技术受到限制,先不处理

得到结果如下

二、Blend Spaces

Blend Spaces 可以让不同方向的动画很好的混合,这里有两种混合空间,一种是 2D blend space,另一种是 1D blend space

在这里我们将 Horizontal Axis 命名为 Direction,设置最大为180,最小为-180用来对应左右偏移角度,同时开启 Snap to Grid 方便将动画放置在 grid 网格上

将 Vertical Axis 命名为 Speed,设置最小值为0,最大值为600,同样开启 Snap to Grid 方便将动画放置在 grid 网格上

下面放置一排的 Idle 是为了加速动画的转换,其左右方向和我们看到的一致,在 Direction 为 180 或者 -180 时候, Character 是向后运动的,因此我们需要放置向后移动的动画

接下来我们进入 ABP_Character 中进行配置

由于在 Blend Space 中我们配置了一个 Direction,所以我们需要在 Event Graph 中定义一个参数

接着我们在 AnimGraph 中设置 Movement,要注意的是,这里的速度一般指的是地面速度,因此我们可以直接使用 Vector Length XY 来计算 地面速度

但是目前并没有向左或者向右移动的效果,因为我们开启了 Orient Rotation to Movement,将 Orient Rotation to Movement 设置为 False

这种效果可以在锁定敌人的时候使用,但是这样我们还需要设置一下 CharacterMovement,开启 Use Controller Desired Rotation

最后我们可以得到效果如下

三、Aim Offset

Aim Offset 可以用来独立移动某一部位,如头的朝向以及手或者武器的朝向,additive animation 基本上意味着在当前播放的动画之上添加动画信息

其动画资产的命名方式一般为 XX_AO_XX,其中 AO 表示 Aim Offset,其 frame 一般也只有一帧

在动画资产的 Additive Settings 中,我们需要将 Additive Anim Type 设置为 Mesh Space,Base Pose Type 设置为 Selected animation frame,Base Pose Animation 设置为 AO_CC,这样可以计算出当前动画与Base Pose Animation动画的变化从而发生改变

右键创建一个 Aim Offset,选择骨骼后命名为 AO_Character

这里将 Horizontal Axis 命名为 Yaw,范围设置为 -180 到 180,开启 Snap to Grid,另一边将 Vertical Axis 命名为 Pitch,范围设置为 -90 到 90,开启 Snap to Grid

由于 Yaw 的计算是从0 -> 180,180接着-180,然后是-180 -> 0,因此我们需要保证Yaw 在 180和-180位置上的动画是一致的

在这里如果出问题,我们只需要换一下 Preview Base Pose 就好

这里 Aim Offset 就设置完毕了,接下来我们需要去 ABP_Character 中设置 Yaw 和 Pitch,首先在AnimGraph中拖入 AO_Character,设置两个变量 Yaw 和 Pitch,由于 AO 是一个附加动画,因此我们只需要加原来的动画添加到 AO 上,然后将 AO 与 Output Pose 连接就好

在 Event Graph 中创建一个计算 Yaw 和 Pitch 的函数,有如下两种方法,其区别在与是否使用 Clamp Angle 以及 Interp Speed

方法一有摇头动作,因为在Yaw在-180到180过度时候两种状态不一致, 因此使用 RInterp To 的 Interp Speed 进行状态的插值时间过度

得到效果如下

方法二没有摇头动作,由于 Yaw 在 -180 和 180 上的动画一致,所以有衔接性,无需插值过度,讲究就是一个效率

得到效果如下

在这里如果我们在旋转的时候,Character 也跟着旋转,那就是 Character Movement 的问题,我们需要关闭 Use Controller Desired Rotation 和 Orient Rotation to Movement

这里的动画是 Separate 分开处理的,CC,CU,等表达很明确,如果是一个完整的聚合动画,我们需要拆分这个动画,方法如下

四、Montage

Montage 是一个高级的动画资产,允许打断动画并将指定动画插入到动画之中,例如攻击,可以中断所播放的任何动画进行攻击。同时可以在底部的时间轴添加多个动画和动画循环效果,如实现死亡倒地的循环。还有一些更高级的技术,因此 Montage 是十分重要的

这样看来,DefaultSlot Montage 有点类似于 AO,不过前者功能更加高级

在设置 Montage 之前,我们需要在 ABP_Character 的 AnimGraph 中设置一个 Slot DefaultSlot,这个 Slot 是为了播放 Montage 准备的,在 Slot 的右侧 Details 中的 Setting 中我们可以设置 Slot Name,这里默认设置为 DefaultSlot,要注意的是,这里的 Slot Name 要与 Montage 中的 Slot 相对应。在这里我们为了方便,对 State Machine 创建了一个 Cache 去存储,以便可以重复调用

接下来我们来创建 Montage,选择动画右键创建 Montage

在 Montage 之中,我们把 slot name 命名为 DefaultSlot

然后回到 BP_Character 中我们创建一个简单的触发 Montage 事件

得到效果如下

可以发现播放 Montage 的时候运动会出现滑动现象,为了解决这一问题,我们需要对动画进行分层,即身体上半部分执行一个动画,下半部分执行一个动画,回到 ABP_Character 中,我们创建一个 Layered blend per bone,将 AO 处理后的 Pose 传给 Base Pose,slot Montage 传入给Blend Poses 0,同时我们将需要混合 Blend Poses 0 的 spine_01 部位 在 Layer Setup 上指定

执行效果如下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

读人工智能全传01图灵的电子大脑

1. 人工智能 1.1. 人类对人工智能的梦想,可以追溯到很久很久以前 1.1.1. 从古希腊开始,铁匠之神赫菲斯托斯(Hephaestus)拥有赋予金属物品生命的能力 1.1.2. 从16世纪的布拉格开始,传说中伟大的拉比在那里用黏土制作了一个傀儡魔像&#xf…

使用patch-package自动修改node_modules中的内容/打补丁

背景 在使用VuePress搭建个人博客的过程中,我需要使用到一个用来复制代码块的插件uepress-plugin-nuggets-style-copy。 问题:插件可以正常安装,但是启动会报错。通过查看错误信息,定位是插件中的copy.vue文件出现错误&#xff0c…

【实战场景】记一次UAT jvm故障排查经历

【实战场景】记一次UAT jvm故障排查经历 开篇词:干货篇:1.查看系统资源使用情况2.将十进制进程号转成十六进制3.使用jstack工具监视进程的垃圾回收情况4.输出指定线程的堆内存信息5.观察日志6.本地环境复现 总结篇:我是杰叔叔,一名…

仿论坛项目--初识Spring Boot

1. 技术准备 技术架构 • Spring Boot • Spring、Spring MVC、MyBatis • Redis、Kafka、Elasticsearch • Spring Security、Spring Actuator 开发环境 • 构建工具:Apache Maven • 集成开发工具:IntelliJ IDEA • 数据库:MySQL、Redi…

Docker拉取失败,利用 Git将 Docker镜像重新打 Tag 推送到阿里云等其他公有云镜像仓库里

目录 一、开通阿里云容器镜像服务 二、Git配置 三、去DockerHub找镜像 四、编写images.txt文件 ​五、演示 六、其他注意事项 最近一段时间 Docker 镜像一直是 Pull 不下来的状态,想直连 DockerHub 是几乎不可能的。更糟糕的是,很多原本可靠的国内…

Vue+ElementUi实现录音播放上传及处理getUserMedia报错问题

1.Vue安装插件 npm install --registryhttps://registry.npmmirror.com 2.Vue页面使用 <template><div class"app-container"><!-- header --><el-header class"procedureHeader" style"height: 20px;"><el-divid…

密码学及其应用 —— 密码学的经典问题

1. 古典密码学问题 1.1 问题1&#xff1a;破解凯撒密码 1.1.1 问题 凯撒密码是最简单的单字母替换加密方案。这是一种通过将字母表中的字母固定向右移动几位来实现的加密方法。解密下面的文本&#xff0c;该文本通过对一个去除了空格的法语文本应用凯撒密码获得&#xff1a; …

layui-按钮

1.用法 使用 用button标签 type"button" class"layui-button" 效果&#xff1a; 2.主题设置 前面都要加上layui-bin 3.尺寸设置 可以叠加使用&#xff01; 4.圆角设置 加一个layui-bin-radius 5.按钮图标设置 里面加一个i标签 加class"layui-…

借教室(题解)

P1083 [NOIP2012 提高组] 借教室 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a;二分前缀和 我们将和质检员那题差不多&#xff0c;只需要将候选人二分即可 #include<bits/stdc.h> using namespace std; #define int long long int n,m; int r[100000…

【操作与配置】VSCode配置Python

Python环境配置 可以参见&#xff1a;【操作与配置】Python&#xff1a;CondaPycharm_pycharmconda-CSDN博客 官网下载Python&#xff1a;http://www.python.org/download/官网下载Conda&#xff1a;Miniconda — Anaconda documentation VSCode插件安装 插件安装后需重启V…

disql使用

进入bin目录&#xff1a;cd /opt/dmdbms/bin 启动disql&#xff1a;./disql&#xff0c;然后输入用户名、密码 sh文件直接使用disql&#xff1a; 临时添加路径到PATH环境变量&#xff1a;在当前会话中临时使用disql命令而无需每次都写完整路径&#xff0c;可以在执行脚本之前…

Eclipse + GDB + J-Link 的单片机程序调试实践

Eclipse GDB J-Link 的调试实践 本文介绍如何创建Eclipse的调试配置&#xff0c;如何控制调试过程&#xff0c;如何查看修改各种变量。 对 Eclipse 的要求 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。从 https://www.eclipse.org/downloads/packages/ 下载 Ecli…

20240628模拟赛总结

cf好了 让我们开始 T1 Two Regular Polygons 判断能不能构造出题中要求的正多边形 关键是n%m0 Two Regular Polygons #include<bits/stdc.h> using namespace std; int t; int n,m; int main() {cin>>t;for(int i1;i<t;i){cin>>n>>m;if(n%m0)co…

MySQL 代理层:ProxySQL

文章目录 说明安装部署1.1 yum 安装1.2 启停管理1.3 查询版本1.4 Admin 管理接口 入门体验功能介绍3.1 多层次配置系统 读写分离将实例接入到代理服务定义主机组之间的复制关系配置路由规则事务读的配置延迟阈值和请求转发 ProxySQL 核心表mysql_usersmysql_serversmysql_repli…

【C++】相机标定源码笔记- 标定工具库测试

标定工具库测试 一、计算相机内参&#xff1a;对两个相机进行内参标定&#xff0c;并将标定结果保存到指定的文件中 采集图像&#xff1a;相机1-16张 相机2-17张 定义保存相机1/2内参的文件(.yml)路径。 定义相机1/2采集的图片文件夹路径。定义相机1/2存储文件名的向量获取文件…

作为图形渲染API,OpenGL和Direct3D的全方位对比。

当你在网页看到很多美轮美奂的图形效果&#xff0c;3D交互效果&#xff0c;你知道是如何实现的吗&#xff1f;当然是借助图形渲染API了&#xff0c;说起这个不就不得说两大阵营&#xff0c;OpenGL和Direct3D&#xff0c;贝格前端工场在本文对二者做个详细对比。 一、什么是图形…

26.5 Django模板层

1. 模版介绍 在Django中, 模板(Templates)主要用于动态地生成HTML页面. 当需要基于某些数据(如用户信息, 数据库查询结果等)来动态地渲染HTML页面时, 就会使用到模板.以下是模板在Django中使用的几个关键场景: * 1. 动态内容生成: 当需要根据数据库中的数据或其他动态数据来生…

推动能源绿色低碳发展,风机巡检进入国产超高清+AI时代

全球绿色低碳能源数字转型发展正在进入一个重要窗口期。风电作为一种清洁能源&#xff0c;在碳中和过程中扮演重要角色&#xff0c;但风电场运维却是一件十足的“苦差事”。 传统的风机叶片人工巡检方式主要依靠巡检人员利用高倍望远镜检查、高空绕行下降目测检查(蜘蛛人)、叶…

校园水质信息化监管系统——水质监管物联网系统

随着物联网技术的发展越来越成熟&#xff0c;它不断地与人们的日常生活和工作深入融合&#xff0c;推动着社会的进步。其中物联网系统集成在高校实践课程中可以应用到许多项目&#xff0c;如环境气象检测、花卉种植信息化监管、水质信息化监管、校园设施物联网信息化改造、停车…

Qt6 qcustomplot在图表上画一条直线

完整代码如下: 主要注意的是Qt中的QHBoxLayout等Qt类对象在被引用的情况下是可以使用局部变量的,典型的如setLayout这类型的函数接口,都可以使用局部变量,而不是new对象。 另外一点就是qcustomplot中的replot就相当于Qt中的update,由于qcustomplot是属于绘图类的接口库,…