UE5 动画蓝图

news2024/11/17 21:42:32

文章目录

  • 一、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 上指定

执行效果如下

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

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

相关文章

RK3568平台(USB篇)TYPE-C接口与PD协议

一.TYPE-C接口简介 type-c 插座: type-c 插头: type-c 线缆: type-c 接口定义之插座: type-c 硬件原理图: VBUS:供电引脚,用于传输电源电压,一般为5V或12V。 GND:地引…

类与对象(3)

1.首先我们先介绍一下 赋值重载 我们来举个例子来实现一下 赋值重载也叫赋值拷贝 void operator(const Date& d){//赋值拷贝 是拷贝给一个已经赋值好的对象 也叫赋值重载cout << "赋值重载" << endl;year d.year;month d.month;day d.day;} 如果…

Linux 高级编程——线程控制

线程控制&#xff1a;互斥与同步 概念&#xff1a; 互斥 》在多线程中对临界资源的排他性访问。 互斥机制 》互斥锁 》保证临界资源的 访问控制。 pthread_mutex_t mutex; 互斥锁类型 互斥锁变量 内核对象 框架&#xff1a; 定义互斥锁 》初始化锁 》加…

uniapp中如何进行微信小程序的分包

思路&#xff1a;在uniapp中对微信小程序进行分包&#xff0c;和原生微信小程序进行分包的操作基本上没区别&#xff0c;主要就是在pages.json中进行配置。 如图&#xff0c;我新增了一个包diver-page 此时需要在pages.json中的subPackages数组中新增一项 root代表这个包的根…

“论单元测试方法及应用”精选范文,软考高级论文,系统架构设计师论文

论文真题 1、概要叙述你参与管理和开发的软件项目,以吸你所担的主要工作。 2、结给你参与管理和开发的软件项目&#xff0c;简要叙述单元测试中静态测试和动态测试方法的基本内容。 3、结给你惨与管理和研发的软件项目,体阐述在玩测试过程中,如何确定白盒测试的覆盖标准,及如…

Sourcecodester Fantastic Blog CMS v1.0 SQL 注入漏洞(CVE-2022-28512)

前言 CVE-2022-28512 是一个存在于 Sourcecodester Fantastic Blog CMS v1.0 中的 SQL 注入漏洞。攻击者可以通过 "/fantasticblog/single.php" 中的 id 参数注入恶意 SQL 查询&#xff0c;从而获得对数据库的未经授权的访问和控制。 漏洞详细信息 漏洞描述: 该漏…

QML学习——Qt Quick Extras Examples 1.4(八)

Qt Quick Extras Examples 阅读官方的源码然后尝试做了下 01 A car dashboard 样例演示&#xff1a; 说明&#xff1a; ValueSource组件控制数值相关的动画&#xff0c;例如图中数值的变化&#xff1b;TurnIndicator组件是控制左右方向灯的闪烁和背景&#xff0c;里面使用…

深入解析HDFS:定义、架构、原理、应用场景及常用命令

引言 Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09;是Hadoop框架的核心组件之一&#xff0c;它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用…

【Kotlin】Kotlin 基础语法指南

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

vue项目手机录音

手机实现录音功能&#xff0c;安卓和苹果都可。功能&#xff0c;点击开始录制录音后&#xff0c;随时可以停止录音&#xff0c;如果不点击停止最多录制15秒。 页面结构 <!--音频--> <div class"audio-box"><audio id"audioPlayer"controlsc…

excel修改批量一列单价的金额并保留1位小数

1.打开表格&#xff0c;要把单价金额变成现在的两倍&#xff0c;数据如下&#xff1a; 2.把单价这一列粘贴到一个新的sheet页面&#xff0c;在B2单元格输入公式&#xff1a;A2*2 然后按enter回车键,这时候吧鼠标放到B2单元格右下角&#xff0c;会出现一个黑色的小加号&#xf…

泰国火出圈的slots游戏联动本土网盟广告推广优势

泰国火出圈的slots游戏联动本土网盟广告推广优势 在泰国&#xff0c;Slots游戏凭借其独特的魅力和吸引力&#xff0c;迅速成为玩家们的热门选择。然而&#xff0c;要在竞争激烈的市场中脱颖而出&#xff0c;推广策略显得尤为重要。本土网盟广告以其独特的优势&#xff0c;为Sl…

制氢厂氢气泄漏安全监测:氢气传感器守护“氢”安全

随着全球能源结构的转型和清洁能源的需求日益增长&#xff0c;氢能作为一种高效、清洁的能源载体&#xff0c;受到了广泛关注。制氢厂作为氢能产业的重要组成部分&#xff0c;其安全问题也日益凸显。在制氢过程中&#xff0c;氢气泄漏是潜在的安全隐患之一&#xff0c;因此&…

数据结构/作业/2024/7/11

1.在堆区申请两个长度为32的空间&#xff0c;实现两个字符串的比较【非库函数实现】 #include <stdio.h> #include <stdlib.h> void input(char*p); void my_strcmp(char *p1,char *p2); int main(int argc, const char *argv[]) {//申请内存空间32个字节 char *p…

vue3 elementplus Springboot 课程购买系统案例源码

系统演示 项目获取地址 Springboot vue3 elementplus 课程购买系统案例源码 附带系统演示&#xff0c;环境搭建教程,开发工具 技术栈:SpringBoot Vue3 ElementPlus MybatisPlus 开发工具:idea 后端构建工具:Maven 前端构建工具:vite 运行环境:Windows Jdk版本:1.8 Nod…

javaweb(四)——过滤器与监听器

文章目录 过滤器Filter基本概念滤波器的分类: 时域和频域表示滤波器类型1. 低通滤波器(Low-Pass Filter)2. 高通滤波器(High-Pass Filter)3. 带通滤波器(Band-Pass Filter)4. 带阻滤波器(Band-Stop Filter) 滤波器参数1. 通带频率(Passband Frequency)2. 截止频率(Cutoff Frequ…

Cesium与Three相机同步(3)

Cesium与Three融合的案例demo <!DOCTYPE html> <html lang"en" class"dark"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content&q…

【论文阅读】-- M4:面向可视化的时间序列数据聚合

M4: A Visualization-Oriented Time Series Data Aggregation 摘要1 引言2. 查询重写3.时间序列可视化4. 数据缩减运算符4.1 面向可视化的数据聚合4.2 M4聚合4.3 聚合相关的像素错误4.4 M4 上限 5. 时间序列数据缩减6. 评估6.1 真实世界时间序列数据6.2 查询执行性能6.3 可视化…

ByLabel标签打印系统有人用过吗,哪些打小票的软件比较方便?热敏打印机

刚接触小票机热敏打印机ZDesigner ZD888-203dpi ZPL&#xff0c;看网上的说明是要用ZPL打印机协议&#xff0c;一时学不会。 看一个小票机个子小小的&#xff0c;费用要一二千元&#xff0c;外国人真会赚钱。 斑马打印机&#xff0c;网上说的是中文要转换成图片&#xff0c;或者…

ChatGPT 官方发布桌面端,向所有用户免费开放

Open AI 官方已经发布了适用于 macOS 的 ChatGPT 桌面端应用。 此前&#xff0c;该应用一直处于测试阶段&#xff0c;仅 Plus 付费订阅用户可以使用。 目前已面向所有用户开放&#xff0c;所有 Mac 用户均可免费下载使用。 我们可以访问官网下载安装包&#xff1a;https://op…