百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

UE4骨骼动画新手入门(ue4骨骼动画制作)

zhezhongyun 2025-07-24 23:18 14 浏览

很少会看到没有动画的现代游戏。这是因为动画是传达运动的关键。如果没有动画,角色看起来就像是在滑动而不是在奔跑。

幸运的是,虚幻引擎可以让我们轻松轻松地立即为角色制作动画!

在本教程中,我们将学习如何:

  • 导入带有骨架的网格
  • 导入动画
  • 创建动画蓝图以过渡到不同的动画
  • 动画之间的混合

请注意,我们将在本教程中使用蓝图。

1、项目资料下载

下载启动项目并解压缩。在根目录中,我们将看到一个名为Animation Assets的文件夹。此文件夹包含将要导入的角色和动画。

通过导航到项目文件夹并打开SkywardMuffin.uproject来打开项目。

注意:如果收到一条消息说项目是使用早期版本的虚幻编辑器创建的,那没关系(引擎经常更新)。可以选择打开副本的选项,也可以选择就地转换的选项。

播放开始游戏。游戏的目标是在不坠落的情况下触摸尽可能多的云。单击鼠标左键跳到第一朵云。

让我们控制这个可爱的小松饼,而不是一个普通的红色圆圈:

这个松饼包含一个骨架,可以让我们对其进行动画处理。

2、什么是骨骼?

在 3D 应用程序中,骨骼是一组相互连接的点,称为关节。在下图中,每个球体都是一个关节。

注意:虚幻引擎可以互换使用术语关节骨骼

通过操纵这些关节,我们可以为角色创建不同的姿势。

当从一个姿势转到另一个姿势时,我们正在创建一个动画

如果在之前的姿势之间创建更多的姿势,可以得到这样的结果:

在虚幻中,任何带有骨架的网格都是骨架网格。让我们从导入松饼的骨架网格开始。

3、导入骨架网格体

转到内容浏览器并导航到Characters\Muffin。单击导入,然后转到SkywardMuffinStarter\Animation Assets。选择SK_Muffin.fbx,然后单击Open

在导入窗口中,转到Mesh部分并取消选中Create Physics Asset选项。物理资源有助于创建布娃娃效果。由于本教程不涉及这一点,因此我们不需要。

该项目已包含松饼材质和纹理,因此无需导入它们。取消选中Import MaterialsImport Textures选项。

将其他所有内容保留为默认设置,然后单击Import。这将创建以下资产:

  • SK_Muffin:骨架网格物体。这基本上只是一个带有骨架资产链接的网格。
  • SK_Muffin_Skeleton:骨架资产。这包含关节列表和其他信息,例如它们的层次结构。

现在已经导入了松饼,是时候使用它了。

4、使用骨架网格体

在使用新的骨架网格体之前,应该给它一个材质,这样它就不仅仅是一个灰色的斑点。双击SK_Muffin其打开。

转到 Asset Details 面板并找到Material Slots部分。指定M_Muffin材质,然后关闭SK_Muffin

现在,让我们使用SK_Muffin作为玩家角色。返回内容浏览器并双击BP_Muffin其打开。

转到 Components 面板并选择Mesh (Inherited)组件。导航到 Details 面板并找到Mesh部分。将骨架网格体属性设置为SK_Muffin

单击编译,然后返回主编辑器。按Play以松饼的形式玩游戏!

游戏已经看起来好多了!下一步是导入一些动画,为松饼增添活力。

5、导入动画

转到内容浏览器并单击导入。确保你在SkywardMuffinStarter\Animation Assets中。选择以下文件:

  • SK_Muffin_Death.fbx
  • SK_Muffin_Fall.fbx
  • SK_Muffin_Idle.fbx
  • SK_Muffin_Jump.fbx
  • SK_Muffin_Walk.fbx

完成后,单击Open

在导入窗口中,转到Mesh部分并取消选中Import Mesh选项。这将确保骨架网格体不会再次导入。

接下来,确保将Skeleton属性设置为SK_Muffin_Skeleton。这指定了动画将使用的骨架。

最后,单击全部导入。这将使用我们刚刚指定的设置导入所有动画。

现在已经拥有了所有动画,我们需要一种播放它们的方法。可以使用动画蓝图来执行此操作。

6、创建动画蓝图

动画蓝图类似于常规蓝图。但是,它还具有专用于动画任务的图表。

要创建一个,请转到 Content Browser 并单击Add New按钮。选择动画\动画蓝图

在弹出窗口中,找到Target Skeleton属性并选择SK_Muffin_Skeleton。接下来,单击OK按钮以创建动画蓝图。

将资产重命名为ABP_Muffin。之后,双击它以在动画蓝图编辑器中打开它。

7、动画蓝图编辑器

动画蓝图编辑器与蓝图编辑器类似,但多了四个面板:

  1. 动画图:此图专用于动画。这是你将播放动画的地方。
  2. 预览场景设置:此面板允许你调整视口中的预览场景
  3. 动画预览编辑器:创建的变量也将显示在这里。使用此面板预览变量对最终动画的影响。
  4. 资源浏览器:此面板包含当前骨架可以使用的动画列表

要定义每个动画的播放时间,我们可以使用State Machine

8、什么是状态机?

状态机是一组状态规则。出于本教程的目的,可以将状态视为动画。

状态机一次只能处于一种状态。要转换到不同的状态,必须满足某些条件(由规则定义)。

下面是一个简单的状态机示例。它显示了跳跃的状态和转换到每个状态的规则。

国家也可以有双向关系。在下面的示例中,Jump 和 Fall 状态可以相互转换。

如果没有这种双向关系,角色将无法进行二段跳。这是因为角色只能从空闲状态进入跳转状态。

状态机就够了。让我们继续创建一个新的状态机。

确保在 Anim Graph 中,然后右键单击空白区域。从菜单中,选择Add New State Machine

这会将状态机节点添加到图表中。将状态机重命名为Locomotion。之后,将Locomotion State Machine 连接到Final Animation Pose节点。

现在,运动状态机将确定松饼的最终动画。

接下来,双击Locomotion State Machine 将其打开。在里面,我们将看到一个Entry节点。

连接到该节点的状态是默认状态。对于本教程,默认状态是空闲动画。通过右键单击图表上的空白区域来创建此状态。从菜单中,选择Add State并将其重命名为Idle

现在,我们需要将Entry节点连接到Idle状态。将Entry引脚拖放到空闲状态的灰色区域。释放左键单击以连接它们。

当我们使用上下文菜单创建状态时,它不会有与之链接的动画。让我们解决这个问题。

9、将动画链接到状态

双击空闲状态将其打开。

要链接动画,请转到资产浏览器,然后拖动单击SK_Muffin_Idle动画。释放左键单击图表中的空白区域以添加它。

接下来,将Play SK_Muffin_Idle节点连接到Final Animation Pose节点。

要使用动画蓝图,您需要更新BP_Muffin

10、使用动画蓝图

单击编译,然后切换到BP_Muffin

转到 Components 面板,然后选择Mesh (Inherited)组件。转到详细信息面板,然后找到动画部分。

动画模式设置为使用动画蓝图。接下来,将Anim Class设置为ABP_Muffin

现在,骨架网格体将使用ABP_Muffin作为其动画蓝图。

单击编译,然后关闭BP_Muffin。转到主编辑器并按Play以测试动画蓝图。由于空闲是默认状态,松饼会自动使用空闲动画。

在下一节中,我们将创建跳跃和下降的状态。

11、创建跳跃和坠落状态

返回到ABP_Muffin,然后切换回Locomotion State Machine 的图形。我们可以通过单击位于图表顶部的Locomotion面包屑来执行此操作。

可以创建一个已链接动画的状态,而不是创建状态然后链接动画。让我们为跳跃状态做这件事。

转到资产浏览器,然后拖动单击SK_Muffin_Jump动画。释放左键单击图表中的空白区域。这将创建一个已链接动画的状态。

将状态重命名为Jump

使用SK_Muffin_Fall动画重复该过程并将状态重命名为Fall

我们现在将拥有三种状态:IdleJumpFall

接下来,我们将把这些状态相互链接起来。可以通过拖动单击要转换的状态的灰色区域执行操作。释放左键单击目标状态的灰色区域以创建转换。

创建以下转换:

  • 空闲跳转_
  • 跳到秋天_
  • 跌倒跳_
  • 闲置_ _

现在有了转换,需要定义何时可以发生转换。我们可以使用转换规则来做到这一点。

12、状态过渡规则

这个图标代表一个转换规则:

每个转换规则都包含一个带有单个布尔输入的结果节点。

如果此输入为true,则可能发生转换。

接下来,我们将创建变量来通知您玩家是在跳跃还是在跌落。然后,将在转换规则中使用这些变量。

13、检查玩家状态

创建两个名为IsJumpingIsFalling的布尔变量。

首先,我们将设置IsJumping的值。切换到 Event Graph 并找到Event Blueprint Update Animation节点。此节点的功能类似于Event Tick节点。

要检查玩家是否在跳跃,请创建以下设置:

这将检查玩家在Z 轴上的速度是否大于0。如果是,则玩家正在跳跃并且IsJumping将设置为true

注意:确保转换为将使用动画蓝图的类。这对于能够使用动画预览编辑器预览变量至关重要。

要检查玩家是否跌倒,只需执行相反的检查。添加突出显示的节点:

现在,如果玩家的Z-Velocity小于0 ,则 IsFalling将设置为true

是时候使用这些变量来定义转换规则了。

14、定义转换规则

首先,我们将定义空闲到跳转转换规则。切换回运动状态机。双击Idle to Jump Transition Rule 打开它。

创建一个IsJumping节点并将其连接到Result节点。

现在,当IsJumpingtrue时, Idle状态可以转换为Jump状态。

对Jump to FallFall to Jump过渡规则重复该过程。使用以下变量:

  • 跳到秋天: IsFalling
  • Fall to Jump: IsJumping

现在,JumpFall状态可以相互转换。

还有一个转换规则需要定义。继续并打开“从秋季到空闲转换规则”。

要转换到空闲状态,玩家不能跳跃或下降。要执行此检查,您可以使用NOR节点。只有当它的两个输入都为false时,此节点才会返回true

创建一个NOR节点并将IsJumpingIsFalling节点连接到它。然后,将NOR节点连接到Result节点。

现在,当IsJumpingIsFallingfalse时, Fall状态可以转换为Idle状态。

单击编译,然后返回主编辑器。按Play测试过渡。

注意:还可以通过在动画预览编辑器中编辑变量来测试过渡。

现在,松饼在地面移动时只是滑动。这是因为你还没有使用步行动画!

可以使用Blend Space将其与空闲动画混合,而不是为行走创建新状态。

15、什么是混合空间?

混合空间是一种动画资源。它根据输入值在不同动画之间进行插值。在本教程中,我们将使用玩家的速度作为输入。

混合空间还可以帮助简化状态机。如果不使用混合空间进行行走,以下是运动状态机的外观:

使用混合空间,所要做的就是替换空闲动画。

现在已经了解了混合空间的魔力,让我们创建一个。

16、创建混合空间

转到 Content Browser 并单击Add New。选择Animation\Blend Space 1D

注意:Blend SpaceBlend Space 1D之间的区别在于前者可以有两个输入。后者只能有一个

从弹出窗口中,选择SK_Muffin_Skeleton

将资源重命名为BS_IdleWalk,然后双击它以在动画编辑器中打开它。

当打开混合空间时,会在底部看到一个面板。这是混合空间编辑器,我们将在这里添加动画。

让我们在混合空间中添加一些动画。

17、将动画添加到混合空间

首先,我们将更改轴值(输入)的名称。转到 Asset Details 面板并找到Axis Settings部分。将Horizontal Axis\Name属性更改为Speed

现在,我们将添加动画。转到资产浏览器并拖动单击SK_Muffin_Idle动画。将其移动到混合空间网格的左侧,使其捕捉到0.0值。释放左键单击以添加动画。

注意:要显示动画名称,请按混合空间网格 左上角的标签图标。

之后,在100.0值处添加SK_Muffin_Walk动画。

现在,混合空间将根据输入值混合空闲和行走动画。如果输入为0,则只会播放空闲动画。如果输入为100,则只会播放步行动画。介于两者之间的任何东西都将是混合的。

注意:这些值是任意的。例如,我们可以将最大值更改为 500。这将导致步行动画仅以更高的速度播放。

我们可以更改“资产详细信息”面板中 “轴设置”部分下的值。

是时候使用混合空间了。

18、使用混合空间

关闭BS_IdleWalk然后打开ABP_Muffin。切换到Locomotion状态机,然后打开Idle状态。

首先,删除Play SK_Muffin_Idle节点。

接下来,使用拖放方法添加BS_IdleWalk混合空间。之后,将BS_IdleWalk节点连接到Final Animation Pose节点。

现在,BS_IdleWalk将自动播放,因为它是默认状态。但是,它只会显示空闲动画。这是因为它的Speed输入保持在0

要解决此问题,我们需要为其提供玩家的速度。

19、获取玩家的速度

创建一个名为Speed的新浮点变量。之后,切换到事件图表。

将新引脚添加到Sequence节点,然后将突出显示的节点添加到其中:

此设置将不断将Speed变量设置为玩家的速度。

切换回空闲状态的图表。将Speed变量连接到BS_IdleWalk节点的Speed输入。

现在,BS_IdleWalk将能够混合空闲和行走动画。

单击编译,然后返回主编辑器。按Play测试混合空间。

我们还需要使用另一种动画:死亡动画!

20、使用死亡动画

在这个游戏中,你只能在空闲状态(在地面上)死去。但是,让我们假设您可能死于任何状态。你的第一个想法可能是创建一个死亡状态并将每个状态连接到它。虽然这是一种选择,但它很快就会导致图表混乱。

对此的解决方案是通过 bool节点使用 Blend Poses。该节点可以根据输入布尔值在两个动画之间切换。

在创建一个之前,您需要一个保存玩家死亡状态的变量。

21、检查玩家是否死亡

返回ABP_Muffin并创建一个名为IsDead的布尔变量。之后,切换到事件图表。

将新引脚添加到Sequence节点,然后将突出显示的节点添加到其中:

这将根据玩家的死亡状态设置IsDead变量。

接下来,我们将使用布尔节点的混合姿势。

22、使用 Bool 节点的混合姿势

切换到 Anim Graph 并添加SK_Muffin_Death动画。选中它后,转到详细信息面板并取消选中循环动画属性。

这将确保死亡动画只播放一次。

接下来,通过 bool节点创建一个混合姿势。

选择Blend Poses by bool节点后,转到 Details 面板。在Option部分下,选中Reset Child on Activation属性。

由于死亡动画只播放一次,此选项将确保动画在播放前重置。

最后,添加IsDead变量并像这样连接所有内容:

现在,如果IsDeadtrue,将播放死亡动画。如果IsDeadfalse ,则将播放Locomotion状态机的当前动画。

单击编译,然后关闭ABP_Muffin。按播放并测试新的死亡动画!

可以在此处下载已完成的项目。


原文链接:
http://www.bimant.com/blog/ue4-skeleton-animation-tutorial/

相关推荐

Trump Pushes for 15%-20% Minimum Tariffs on EU, Sticks to Auto Duties: Report

TMTPOST--U.S.PresidentDonaldTrumpistakingatougherstanceduringtradenegotiationswiththe...

Note-15.使用A4988控制步进电机(dvp15mc11t控制步进电机)

如果需要控制一堆步进电机,那么只使用一个Arduino来控制,就会占用大量的处理时间,而无法处理其他事情,除非使用一个独立的专用步进电机驱动器:A4988。A4988只需两个引脚就可以控制双极步进电机...

Negotiated settlement, not sanctions, the right way to end the Ukraine crisis

Negotiatedsettlement,notsanctions,therightwaytoendtheUkrainecrisis:ChinaDailyeditorial...

U.S. Services May be Added to EU's Retaliatory Target List as More Members Seek Powerful Trade Tool If Talks Fail

TMTPOST--AmericanservicescouldbeaddedtotheEuropeanUnion’sretaliatorytargetlist,highlig...

S7-1200伺服指令运动指令(s71200伺服位置控制实例)

1.MC_Halt指令名称:停止轴运行指令功能:停止所有运动并以组态的减速度停止轴。使用技巧:常用MC_Halt指令来停止通过MC_MoveVelocity指令触发的轴的运行。『注意』部分输入/输出管...

Deepseek太强了!等了10年的Excel模糊下拉,竟然5分钟就搞定了

今天跟大家分享下我们如何通过Deepseek来编写VBA代码,制作模糊搜索的下拉菜单,这个等来十来年的功能,用Deepseek竟然几分钟就搞定了,不得不感叹AI工具的强大,我们以后能干的过AI吗,这真...

7.Unity物理关节(unity物理骨骼)

7.物理关节Unity的物理关节组件将刚体连接到另一个刚体或空间中的固定点。施加使刚体移动的力,关节限制可以限制移动。关节赋予刚体一定的自由度,从而使这些刚体具有不同的运动。Unity提供的物理关...

西门子111报文对应FB284引脚(西门子111报文详解)

西门子FB284是基于111报文的功能块,使用FB284比较方便,直接调用就可以控制V90伺服的定位控制。下面是整理的FB284对应的111报文。便于理解FB284功能块,更方面应用在实际项目中。11...

数据质量动态探查及相关前端实现(数据质量改进实践指南)

需求背景数据探查上线之前,数据验证都是通过写SQL方式进行查询的,从编写SQL,到解析运行出结果,不仅时间长,还会反复消耗计算资源,探查上线后,只需要一次探查,就可以得到整张表的探查报告,但后续...

阿里面试官:你连个排序算法都讲不明白?出门右拐吧

排序算法一表总览其他注意事项:计数排序中,kkk是整数的范围稳定性是指,序列中相同的数是否有可能交换顺序,例如序列中有两个8,顺序为888和8′8^{'}8′,如果在排序完之后,顺序有...

直流电机速度、位置双环控制简明教程

速度、位置的双环控制是我们在电机的控制系统中常用的方法,很实用。下面让我们来看一下内部实现的原理。1.速度闭环控制我们一般在速度闭环控制系统里面,使用增量式PI控制。而在我们的微处理器里面,因为控制器...

纳米机器人的精准定位与导航(纳米机器人怎么控制位置)

纳米机器人的精准定位与导航涉及多学科交叉技术,其“源码”(控制逻辑与算法)需结合硬件特性、环境感知和执行器设计。以下从控制原理、算法逻辑、关键技术实现等方面提供概念性思路(非实际可运行代码),供技术探...

C语言进阶教程:多级指针的应用(c语言一级指针和二级指针)

在C语言中,指针可以指向变量的地址。多级指针(PointerstoPointers或MultilevelPointers)则是指向另一个指针地址的指针。这种概念可以扩展到任意级别(二级指针、...

被 Trac 的文件整理能力圈粉了!这 “香” 气挡不住

前阵子整理电脑文件夹时,我遇到了个麻烦:上千个文档和照片,要是手动一个个重命名、分类,不仅手得点到发麻,估计还得耗上一上午。于是我就琢磨着,能不能找个办法实现一键批量重命名。我先在网上搜了些批量改名软...

Enhancer-轻量化的字节码增强组件包

一、问题描述当我们的业务发展到一定阶段的时候,系统的复杂度往往会非常高,不再是一个简单的单体应用所能够承载的,随之而来的是系统架构的不断升级与演变。一般对于大型的ToC的互联网企业来说,整个系统都是...