开发日志 | UE5角色模型1—模型导入与动画蓝图

🇨🇳仅中文|Chinese only


在制作游戏时,我们常常需要一个角色来作为我们游戏的主角,并且这个主角需要有完整的身体、好看的贴图和完美的动作动画。虽然虚幻引擎提供了默认的人物模型和动画,但其糟糕的外观并不总适用于我们制作的游戏主题,其提供的动画也远远不够使用。所以我们需要自己寻找更合适的模型与动画来进行替换。

网上有许多途径可以获得我们所需要的模型和动画,无论是虚幻商城、各种动画论坛或是淘宝。其中最为推荐的网站是Mixamo,它是由Adobe所建立的免费模型与动画库,并且支持商业,对于游戏制作或动画新人来说,该网站中的内容已经足够使用了。本文不在此详细讲述如何使用Mixamo,有需要的可以访问知乎上的教程学习。无论通过何种途径,我们最终得到的都应该是“.FBX”格式的文件。如果你手中拥有的是mmd专用的“.PMX”模型或是二次元常用的“.VRM”模型,那么可以在网上找到适用于Blender的格式转换插件,安装好插件,把以上模型导入Blender,然后导出“.FBX”文件即可。

前述的“.FBX”文件是一种非常强大的3D数据交换格式,它可以存储模型、骨骼、贴图、动画、灯光摄像机等等在3D领域常见的内容。但也正因如此,在我们往UE里导入模型和动画前,务必区分清手中的“.FBX”文件有哪些是纯角色模型,哪些是纯动画,哪些既有模型又有动画。

FBX导入

当我们把包含角色模型的“.FBX”文件拉进UE5的内容浏览器中时,UE5会自动弹出如左图的FBX导入选项框。

一般情况下,我们并不需要修改其中的设置。导入后我们将在内容浏览器中看到贴图、材质、网格图、骨骼等内容,如果文件中还包括了动画,那么在内容浏览器中也会出现相应的动画序列。

在需要把文件中的模型作为新模型时,Skeleton一栏显示的不是None,则需要在下拉框中选择清除,使该栏显示为None。

在不想导入文件中的模型,只想将文件中的动画附加到已有的角色模型上时,需要取消勾选“Import Mesh”,然后在Skeleton一栏选择需要附加的角色模型的骨骼。需要注意的是,动画的骨骼和被附加的角色模型的骨骼不一致会导致导入失败。如果需要将一种骨骼的动画导入到另一种骨骼上,那么需要使用骨骼重定向功能。


当我们把只包含动画的“.FBX”文件拉进UE5的内容浏览器中时,UE5会自动弹出如右图的FBX导入选项框。

一般情况下,我们并不需要修改其中的设置。 但是在导入前检查一下Skeleton是否是我们需要附加动画的角色模型的骨骼,如上文一样,两种骨骼不一致会导致导入失败。

如果Skeleton一栏显示为None的话就需要在下拉列表里手动选择骨骼,如果列表里没有我们需要的骨骼,就说明上一步导入角色模型出了问题。


如果导入正确,那么我们能在内容浏览器中看到以下内容,包括角色的贴图,材质球,骨骼网格体,模型,骨骼和附加的Animation。强烈建议你在此整理一下导入的内容,将贴图材质与动画资产分别放入单独的文件夹中。

混合空间

混合空间可以将多个动画序列进行混合,并使用变量来控制混合深度。混合空间分为1D和2D两种,1D的混合空间为单个水平坐标的图表,仅可靠这一个变量来控制;2D相比1D增加了垂直坐标,可以通过两个变量共同控制。想要创建一个混合空间,可以在内容浏览器中右键,选择“Animation-Blend Space/Blend Space 1D”,然后选择应用该混合空间的骨骼,UE5.1中的混合空间1D在“Animation-Legacy-Blend Space 1D”。

下图为混合空间的编辑窗口,在左边的资产详情窗口中,我们可以使用Axis Settings中的Minimum Axis Value和Maximum Axis Value控制输入变量的范围,使用Wrap Input控制混合空间的循环状态。右下方为我们之前导入的,依附于该角色模型的骨骼的动画,这些动画将作为混合空间的取样源。正下方是混合图表,它的范围由上述的Axis Value决定,我们可以把多个动画拖入到这个图表中作为取样集,UE将根据动画在图表中的位置关系来混合这些动画并输出。

混合空间最好的例子是UE自带的“WalkRun”,这是一个简单的1D混合空间,但它可以清晰的让我们认识到混合空间的工作原理。我们可以仿照这个“WalkRun”来做一个自己的“WalkRun”。

我们先将闲置、走和跑三种动画放入图表,然后设置图表,把横坐标命名为Speed,输入变量的范围是0-500,因为三种动画只需要用一个变量控制,所以垂直坐标可以不用管,只需要把动画的的垂直坐标设为相同的任意数字即可。横坐标为变量Speed,当Speed为0时角色应该闲置,所以我们把闲置动画放在横坐标为0的位置,走和跑同理,分别放在横坐标为230和500的位置。230和500两个数字是经过测试后最适合这两个动画的速度,当然也可以自己调整测试。最后我们按住Ctrl键并在图表上移动鼠标,即可预览并检查混合空间的效果。到此这个混合空间便编辑完成,具体的使用将在下面的动画蓝图中讲解。

Animation blueprint

动画蓝图是一种专门用于控制网格体动画的蓝图,它由两个主要部分组成,分别是事件图表和动画图表。事件图表与普通的蓝图相似,主要用来定义和更新在动画蓝图中所使用的各种变量;动画图表用来计算使用该蓝图的骨骼网格体在每一帧的最终姿势。 想要创建一个混合空间,可以在内容浏览器中右键,选择“Animation-Animation Blueprint”,然后选择应用该动画蓝图的骨骼。

在动画图表中还有一个重要的组成部分叫状态机,状态机就像一张流程图,它把每个单独的动画用转换规则串联起来,让角色的骨骼按照逻辑关系来播放动画,无论判定条件如何,转换规则只接收True或False,并在接收到True时来执行该转换。

我们以上文中的混合空间为基础,制作一个可以让角色移动的动画蓝图。在新建的动画蓝图中,我们打开到事件图表,用Event Blue Initialize Animation在动画蓝图初始化时执行任务,首先要执行的是获取当前的Character与其Movement Component,并将其提升为变量。

然后在动画每次更新后获取角色移动的速度Ground Speed,速度需要通过计算速度向量的长度得来。将移动速度提升为变量,根据速度判断是否在移动,并将是否在移动设置为一个布尔变量Should Move,当速度大于3,角色在移动,Should Move为True。

到此我们在事件图表中的工作就做完了。接下来进入动画图表中,这里可以对不同的动画进行融合,或者控制骨骼的变形。但是做移动动画并不需要过于复杂的内容,只需要新建一个状态机并连接到Output即可。

点击进入状态机,我们首先需要给角色设置一个在你不控制它时默认播放的动画,这个动画一般叫Idle(闲置)动画,我们只需要将该动画从右下角拖入图表中,并从Entry拖出一根箭头到Idle的边框上。该箭头的意思表明当角色开始执行该状态机时,直接播放Idle动画。注意,如果你在测试时发现角色的闲置动画只播放了一会儿便停止,说明该动画没有被设置为循环动画,你需要双击进入该动画,然后在坐标寻找Loop并勾选。

然后我们需要把我们刚做的混合空间(MyWalkRun)拖入进来,作为角色移动时的动画。同时,我们需要在混合空间和Idle之间拉出箭头来说明这两个动画之间的执行方向和判定条件。

我们双击箭头上的圆圈以进入判定规则的编辑界面。在这两个方向中,我们以是否在移动作为判定条件,当角色在移动时,Should Move为True,动画从Idle变为MyWalkRun;当角色没在移动时,Should Move为False,我们用Not Boolen将其变为True,使动画从MyWalkRun转换为Idle。

最后我们需要给混合空间输入角色的速度,来让混合空间根据角色速度来播放动画。返回状态机然后打开MyWalkRun,可以看到混合空间有两个输入,一个为我们设置的横坐标Speed,一个是没有设置的纵坐标None。我们只需要将在事件图表中设置的Ground Speed链接到MyWalkRun上的Speed即可。

最后的最后,别忘了在游戏的Character蓝图中,将Mesh中的Anim Class和Skeleton Mesh Asset分别设置为我们的动画蓝图和角色模型,然后就可以尝试在游戏中愉快的奔跑啦。

Add a Comment

Your email address will not be published. Required fields are marked *