原文:Unreal Engine 4 Animation Tutorial
做者:Tommy Tran
译者:Shuchang Liuhtml
在本篇教程中,你将学习导入,使用动画资源。web
你会发现,如今基本没有游戏是不须要用到动画的,由于动画是表现动做的关键。没有动做,角色奔跑看起来就不像在奔跑,而是在滑行。app
Unreal的动画系统作的很优秀,能使开发者在短期内完成角色动画。编辑器
在本篇教程中,你将能学会:ide
请注意,本篇教程涉及蓝图部份内容。若是你须要复习有关内容,请查看蓝图教程。svg
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:oop
下载示例项目并解压。在文件根目录,能够看到名为Animation Assets的文件夹。这个文件夹里有咱们须要引入的角色和动画资源。学习
进入项目文件夹,双击SkywardMuffin.uproject打开项目。测试
注意:若是你看到了项目是由较早的引擎版本建立的提示,这很正常(由于引擎常常更新版本)。你能够选择以拷贝副本的形式打开,也能够直接转换项目版本打开。动画
按下Play能够运行游戏。游戏玩法是尽量踩着天空云朵往上跳跃,同时避免掉落地面,点击左键跳跃地面。
咱们要用一只可爱的蘑菇小人来替换游戏里的红色球形:
蘑菇小人带有一套骨架用于动画表演。
在3D软件里,一套骨架是一组彼此链接的关节点集合。好比下图的每一个球体都是一个关节。
注意: Unreal里有时也用骨骼来指代关节,二者意思相同。
经过操控关节,角色能够摆出了不一样的姿式。
当角色从一个姿式切换到另外一个姿式,动画就产生了。
当角色反复切换先后两个姿式,咱们能够看到这样的动画:
在Unreal中,任何带有骨架的网格称之为骨架网格。首先咱们先导入蘑菇小人的骨架网格。
在Content Browser打开Characters\Muffin,点击Import,在选择面板打开SkywardMuffinStarter\Animation Assets目录,选择SK_Muffin.fbx并点击Open。
在导入窗口中,取消勾选Mesh设置的Create Physics Asset选项。Physics Asset是Unreal用于建立ragdoll(布娃娃)效果的组件,因为教程并不须要这种效果,这里就不勾选了。
因为项目已经导入了蘑菇的材质和贴图,因此不用再次引入了。取消勾选Import Materials和Import Textures选项。
其余设置保持默认不变,点击Import,Unreal将建立如下资源:
如今你已经导入了蘑菇资源,接着看怎么使用它们。
在咱们使用骨架网格以前,须要先给它加上材质,不然它只是个灰色模型。双击SK_Muffin打开它。
查看Asset Details面板Material Slots部分设置,将材质指定为M_Muffin而后关闭SK_Muffin。
如今须要将SK_Muffin设置为玩家角色,在Content Browser 双击BP_Muffin.
在Components面板选中Mesh (Inherited)组件,在Details面板的Mesh设置里,将Skeletal Mesh属性设置为SK_Muffin。
点击Compile并回到主编辑器。按下Play用蘑菇小人体验游戏!
游戏感受好多了!下一步要作的是给蘑菇小人加上一些动画表现,让它变得活灵活现。
在Content Browser点击Import,在选择面板打开SkywardMuffinStarter\Animation Assets目录,选择如下文件:
选中并点击Open。
在导入窗口中,取消勾选Mesh设置的Import Mesh选项,避免重复导入骨架网格。
接着,确保Skeleton属性设置成SK_Muffin_Skeleton,这个设置指定了动画会应用在哪一个骨架上。
最后,点击Import All,就成功导入刚才选中的那些动画了。
如今,咱们已经有了全部动画资源了,还须要找到方法播放它们。咱们能够经过动画蓝图(Animation Blueprint)来完成这件事。
动画蓝图很像普通的蓝图。然而,它还有一个专门用于完成动画任务的图表。
首先在Content Broswer点击Add New按钮,选择Animation\Animation Blueprint建立动画蓝图。
在弹出窗口里,找到Target Skeleton属性并选择SK_Muffin_Skeleton,而后点击OK按钮建立动画蓝图。
将新建资源命名为ABP_Muffin。接着双击资源打开动画蓝图编辑器。
动画蓝图编辑器跟蓝图编辑器很是相像,不过额外多了4个面板:
为了肯定每一个动画的播放时机,咱们可使用状态机(State Machine)。
状态机本质是一组状态和规则的集合。在本篇教程中为了方便理解,你能够认为每一个状态都是一个动画。
状态机在任一时刻都只能处于一种状态下,要从一种状态切换到另外一种状态,必须知足其切换条件。
下图是一个简单的状态机例子,它展现了跳跃状态,其与其余状态切换的规则条件。
状态切换还能够是双向的。以下图所示,跳跃和下落状态能够互相切换。
若是没有这种双向关系,角色就没办法实现空中二段跳了,由于角色只有在地面站立状态下才能切换到跳跃状态。
关于状态机简单了解到这里就足够了。下面来动手建立一个状态机。
确保界面处于Anim Graph,右键点击空白区域,从弹出菜单中选择Add New State Machine。
这样图表上会多出一个状态机节点,将其重命名为Locomotion。随后,链接Locomotion状态机与Final Animation Pose节点。
如今,Locomotion状态机就能直接影响蘑菇小人的动做表现了。
接着,双击打开Locomotion状态机,能够看到状态机内部有个Entry节点。
任何与之相连的节点就是默认状态。在本篇教程中,默认状态就是站立动画。在图表空白处右键点击,从弹出菜单中选择Add State,将其重命名为Idle。
如今,链接Entry节点与Idle状态。拖拽Entry引脚至Idle状态的灰色区域,释放鼠标进行链接。
当咱们用弹出菜单建立状态后,它其实尚未关联任何动画,下面来作下动画关联。
双击打开Idle状态。
为了关联动画,在Asset Browser 拖拽SK_Muffin_Idle动画至图表的空白处添加动画。
接着,链接Play SK_Muffin_Idle节点与Final Animation Pose节点。
为了使用动画蓝图,咱们还须要更新BP_Muffin。
点击Compile并切换到BP_Muffin。
在Components面板选中Mesh (Inherited)组件,在Details面板的Animation设置,将Animation Mode改为Use Animation Blueprint,而后Anim Class改为ABP_Muffin。
如今,骨架网格就会使用ABP_Muffin做为动画蓝图了。
点击Compile并关闭BP_Muffin。在主界面点击Play运行游戏测试动画蓝图。因为Idle就是默认状态,蘑菇会自动播放站立动做。
接下来,咱们将会建立跳跃和掉落状态。
回到ABP_Muffin并切换到Locomotion状态机图表,咱们能够经过点击图表上方的Locomotion导航快速跳转过去。
与其建立状态再关联上动画,不如直接建立关联好动画的状态,咱们改用另外一种方法来建立跳跃状态。
在Asset Browser中,拖拽SK_Muffin_Jump动画至图表空白处,就能建立带有动画的状态。
将其重命名为Jump。
重复以上步骤,将SK_Muffin_Fall生成的状态重命名为Fall。
如今咱们就有三个状态了:Idle,Jump和Fall。
接着,咱们要链接这些状态。咱们能够经过拖拽起始状态的灰色区域至目标状态的灰色区域来建立链接。
建立链接状态以下:
如今有了状态切换,还须要肯定什么状况下会发生状态切换,这就要使用过渡规则(Transition Rule)了。
下面图标表示过渡规则:
每一个过渡规则都有一个带有boolean输入的Result节点。
当输入为true时,就会发生状态切换。
接着,咱们要建立变量用于代表玩家角色处于跳跃仍是下落状态,过渡规则里会用到这些变量。
建立两个boolean变量命名为IsJumping和IsFalling。
首先,咱们须要设置IsJumping的值。切换到Event Graph并找到Event Blueprint Update Animation节点,这个节点看起来相似于Event Tick节点。
为了判断玩家是否处于跳跃状态,以下图设置图表:
这样就能确认玩家Z轴的速度是否大于0。若是是,说明玩家处于跳跃状态,将IsJumping变量设置为true。
注意:要确保目标使用了动画蓝图,这样你才能在动画预览编辑器预览变量。
要判断玩家是否处于下落状态,咱们就要作反之相反的检查设置。添加以下高亮节点:
如今,当玩家的Z轴速度小于0时,IsFalling就会设置为true。
是时候将这些变量应用到过渡规则里去了。
首先,你须要定义Idle到Jump的过渡规则。切换到Locomotion状态机。双击打开Idle到Jump过渡规则。
建立IsJumping节点并链接Result节点。
如今,当IsJumping为true时,Idle状态就能切换到Jump状态上。
重复以上步骤来设置Jump到Fall和Fall到Jump过渡规则,分别使用以下变量:
如今,Jump和Fall状态就能正常互相切换了。
还剩下一个过渡规则没有定义。咱们接着打开Fall到Idle过渡规则。
要过渡到Idle状态,玩家确定不能处于跳跃或掉落状态。要实现这样的判断检查,咱们可使用NOR节点。还有当它的输入都为false时,它的输出才为true。
建立NOR节点,并链接IsJumping和IsFalling节点。随后,链接NOR节点与Result节点。
如今,当IsJumping和IsFalling节点都为false时,Fall状态就能切换到Idle状态。
点击Compile并回到主编辑器。按下Play来测试动画转换。
注意:你也能经过在动画预览编辑器编辑变量来测试动画转换。
如今,当蘑菇小人在地面移动时只会滑行,这是由于咱们还没用上步行动画!
除了像上面那样为步行建立一个新状态外,咱们还可使用混合空间(Blend Space)。
混合空间是一种动画资源,它基于输入把两种不一样的动画插值混合在一块儿。在本篇教程中,咱们将以玩家的速度做为输入。
混合空间有助于简化咱们的状态机。下图是若是不使用混合空间的状况下,Locomotion状态机的样子:
使用了混合空间,咱们只须要替换Idle动画便可。
了解完混合空间的魔力,让咱们来建立试试。
在Content Browser里点击Add New,从弹出菜单中选中Animation\Blend Space 1D。
注意:Blend Space跟Blend Space 1D的区别在于前者有2个输入,后者只有1个输入。
从弹出窗口中,选择SK_Muffin_Skeleton。
将新建资源命名为BS_IdleWalk,双击打开动画编辑器。
当咱们打开混合空间,能够看到以下图的面板。这就是混合空间编辑器,咱们要在这里添加动画。
让咱们试试往上面添加些动画。
首先,咱们须要先修改变量(输入)轴的名称,在Asset Details面板找到Axis Settings设置,将Horizontal Axis\Name字段改为Speed。
如今,咱们能够开始添加动画了。在Asset Browser 拖拽SK_Muffin_Idle动画至混合空间网格的左侧,让动画放置在0.0数值处。
注意:若是想要展现动画名称,能够点击网格面板左上角的label图标。
随后,将SK_Muffin_Walk动画添加到100.0数值处。
如今,混合空间会根据输入值混合站立与步行动画。
若是输入为0,只会播放站立动画。若是输入是100,会播放步行动画。其余的中间值就会播放二者插值混合后的动画。
注意:最大最小输入值能够设定成任意值。好比,你能够把最大值设置成500,这样只有在更大的速度下,才会播放步行动画。
你能够在Asset Details面板的Axis Settings设置值范围。
如今就让咱们来使用混合空间吧。
关闭BS_IdleWalk并打开ABP_Muffin。切换到Locomotion状态机并打开Idle状态。
首先,删除Play SK_Muffin_Idle节点。
接着,经过拖拽添加BS_IdleWalk。随后,链接BS_IdleWalk节点与Final Animation Pose节点。
如今,BS_IdleWalk被设置为默认状态,会自动播放了。然而咱们能发现,因为Speed输入一直为0,它只会播放站立动画。
要解决这个问题,咱们须要给它提供玩家速度。
建立名为Speed的float变量,随着切换到Event Graph。
在Sequence节点添加新引脚并添加下图高亮节点:
这样设置就能够恒定将玩家速度设置给Speed变量了。
切换回Idle状态图表,将Speed变量与BS_IdleWalk节点的Speed输入相连。
如今,BS_IdleWalk就能在混合表现站立和步行动画了。
还剩下最后一个动画没用到:死亡动画!
在游戏里,很显然蘑菇小人只有在站立状态(处于地面)才能切换到死亡状态。然而,设想下若是它能在任何状态下切换到死亡状态,咱们的第一想法就是建立Death状态并将其与其余全部状态相连。这固然也是一种选择,但它将很快致使图表变成一团乱麻。
另外一种解决方案是使用Blend Poses by bool节点。这个节点可以根据boolean值输入决定两种动画的切换。
再咱们建立节点前,先建立一个能够保存玩家死亡状态的变量。
回到ABP_Muffin并建立名为IsDead的boolean变量。随后,切换到Event Graph。
在Sequence节点添加新引脚并添加以下图高亮节点:
这样设置就能够恒定将玩家死亡状态设置给IsDead变量了。
接着,咱们再来使用Blend Poses by bool节点。
切换到Anim Graph并添加SK_Muffin_Death动画,选中动画,并在Details面板取消勾选Loop Animation属性。
这样确保死亡动画只会播放一次。
接着,建立Blend Poses by bool节点。
选中Blend Poses by bool节点的状况下,在Details面板的Option设置部分勾选Reset Child on Activation属性。
因为死亡动画只会播放一次,这个选项能够确保动画每次播放前会先自动重置到第一帧。
最后,添加IsDead变量,以下图链接图表:
如今,当IsDead为true时,会播放死亡动画。当IsDead为false时,会播放Locomotion状态机的当前动画。
点击Compile并关闭ABP_Muffin。按下Play运行游戏试试死亡动画吧!
你能够在这里下载完整项目。
这个游戏看起来打磨得更好了,对吧?虽然你已经能够根据所学实现一些东西了,然而还有不少知识点没有涉及!推荐你阅读Unreal引擎文档关于骨架动画系统部份内容,了解其余类型动画资源和具体用法。
若是你还想继续学习引擎其余内容,点击下篇教程,将讲解如何在游戏中使用音乐音效。