UE5角色阶段01
解决角色动画中某部位异常问题,可以先把绑定控制器下了看看能不能解决问题,如果发现问题基本解决那大致可以判断为是IK的位置与骨骼的位置不同,还可以从骨骼树去检查是否是这个问题导致的。如果是由于IK位置不正确导致的,则调整IK位置与对应骨骼位置即可。


2.混合空间是一种用于定义动画过渡和混合的方法,当只考虑一个参数对动画的影响时应该使用1D,当有2个或多个参数时应该考虑使用2D。因为这次制作的持枪跑步动画只考虑水平速度的影响,所以使用的是混合空间1D。在制作混合空间1D时,要将Idle动画,行走动画和冲刺动画分别放置其中并调整对应的速度值(这里在调整时可以使用UE5自带的分析器)。



3.利用按键实现奔跑和步行。
①首先做好映射,可以使用之前的操作映射也可以用增强映射。(这里用的增强映射)
②提前设置好角色的最大移动速度为313(混合空间1D中的中间速度),然后利用“Flip Flop”节点实现按键时状态的切换。(速度的值与刚才混合空间1D给出的分析速度对应)
③这里需要注意一点,因为人物最初的移动速度为313(步行),所以Flip Flop的A引脚应该连接到661速度,避免出现连续按两次shift才能切换走路和奔跑状态的情况。



4.制作对应的持枪跳跃动画。
①通过观察可以发现人物的跳跃分为以下几个部分,并且每部分都有对应的动画。

②当自己获取的跳跃动画是一个完整的动画时,我们就需要通过UE5对其进行拆分。在对Sequence文件进行编辑时可以通过拖拽时间轴进行裁切,然后烘焙出对应的动画序列并保存即可。


③最后把动画放入对应的状态进行替换即可。

5.实现人物蹲伏
①首先,创建对应的输入操作使得按下按键可以决定角色是否蹲伏,此时只有胶囊体是蹲下的,并没有对应的蹲伏动画。
②然后,创建变量使得玩家输入对应按键时,动画蓝图能够做出对应的响应。这里需要在动画蓝图中创建变量并在角色蓝图中调用。(在ABP中创建布尔变量“IsCrouching”,在角色蓝图中调用并赋值)


③创建对应的状态机并匹配动画。
第一步:要明确蹲伏状态可以与Locomotion中的状态进行切换,这里新建状态“Crouching”用于做角色的蹲伏,“To Crouch”可以理解为进入蹲伏状态,该状态别名应包括Locomotion的内容,因为Locomotion可以转化为Crouching。
第二步:编写对应的转化规则,从“To Crouch”到“Crouching”应该满足布尔变量“IsCrouching”的值为真,与之相反的从“Crouching”到“Locomotion”应该满足布尔变量“IsCrouching”的值为假。



第三步:对“Croushing”的内部进行编辑,这里应注意蹲伏应有两种状态,即蹲伏待机和蹲伏移动,所以这里布置了一个状态机,方便后续观察和修改蓝图。(这里也可以直接连接)在CrouchState中从入口处连接了两个状态,这两个状态就是蹲伏待机和蹲伏移动。


第四步:编写状态见的切换规则和配置对应动画。(Walk to Idle的规则与下面的速度判断正好相反),动画部分直接找到对应的动画进行输出即可。(在配置动画时务必勾选循环播放)


6.添加武器:在UE5中添加武器可以理解为在人物对应的骨骼处开槽,然后将对应的武器插入其中,通过不断调整插槽的位置使得人物拿武器的姿势更加自然。
第一步:给角色的骨骼体开槽

第二步:添加武器蓝图,这里可以新建一个蓝图并将对应的网格体添加到武器蓝图中。这里也可以直接将武器的网格体直接拖入人物蓝图中,但是在实际操作中这样做可能会使得人物蓝图过于臃肿(因为此时编辑武器的动画属性之类的都需要在人物蓝图中编辑了),所以一般都会使武器以蓝图的形式添加进来。

第三步:通过调整插槽位置完成武器的添加(可以在调整插槽时添加武器预览资产,方便观察效果)


7.持枪/收枪操作的设置及对应动画的设置
第一步:寻找合适的动画。这里需要利用动画蒙太奇,利用动画蒙太奇播放动画远比直接播放动画更方便调整和调用各种参数(还可以使用动画通知完成一些功能)。选定合适的动画序列生成蒙太奇并进行编辑,这里在动画蒙太奇中配置两个插槽,一个命名为“Fullbody”另一个命名为“Upperbody”。这两个插槽的名称并不影响实际的使用,只是方便使用者在后续的动画蓝图设置时区分不同插槽所控制的动画。

第二步:跟之前一样创建对应的输入操作,这时点击对应的按键并不能够完成动画蒙太奇的播放,我们还需要去动画蓝图内进行编辑,使其可以正确的输出。

第三步:从01-03的内容均是进行对应动作的缓存,此时如果直接将03输出那么人物只能移动或者切枪,并不能够做到移动中切枪。所以我们需要对移动和切枪这两个姿势进行混合。

在04中,我们利用“每个骨骼的分层混合”节点,将02中的各种动作内容作为主姿势,将03中的切枪动画作为混合姿势进行混合,这样可以得到移动中切枪的效果。

这里还需要注意一点,因为系统并不会因为你对缓存姿势的命名或者蒙太奇中插槽的命名而对你想编辑的内容进行识别,所以我们需要对“每个骨骼的分层混合”节点的参数进行调整,让UE知道我们要以何种方式混合这两种姿势。因为我们的移动切枪是上半身做切枪动作,下半身维持运动或待机状态,所以我们这里选择的骨骼是“Spine_01”(可以理解为以这块骨骼为节点,一部分执行主姿势,一部分执行混合姿势),混合深度调整为2。

接下来我们需要让角色在静止时执行待机或静止切枪动作,在移动时执行移动切枪动作。这里使用了“按布尔混合姿势”这一节点(在这个节点中,如果布尔值为真则输出真姿势,如果为假则输出假姿势)。我们将移动切枪作为真姿势,将切枪动作作为假姿势(这里调用03中的切枪缓存的理由是在03中人物的运动姿势和蒙太奇中的切枪动画是直接相连的,两者不会进行混合。在这个情况下,人物只能移动或者只能切枪,这样的姿势用来做静止状态最合适)。

在设置布尔值时,我们新建了一个布尔变量,并在动画蓝图中对其赋值。



到此已经完成切枪动画的正常播放。
第四步:在播放完对应的收枪动作后,人物的武器并不会吸附到背部。这里可以先把对应的插槽准备好。

然后需要准备一个变量、动画通知之类的东西,使得人物在进行完对应的姿势后武器可以处于正确的位置。这里制作了对应的动画通知,当播放到动画的对应位置将会发出一个通知,在动画蓝图中通过这个通知调用角色蓝图中的事件达成武器位置的变换。



动画蓝图这边的工作做完了,接下来该去第三人称角色蓝图中进行这两个事件的编辑了。这边先是在将武器的骨骼体存了一个变量,并且将其位置初始化到角色的背部。

然后将武器位置对应好相应的自定义事件。

做完之后武器能够处于正确的位置,但是发现武器无论处于哪个位置,人物始终是端着枪的姿势,在动画蓝图对对应的姿势进行布尔混合。这里会发现需要两个布尔值进行判断,一个用来判断角色是否移动,另一个用于判断武器现在的位置。


对对应的姿势进行布尔混合,使得持有武器和未持有武器时的动画不同。


到目前为止想要的功能都实现了,除了蹲伏状态的不持枪动画(因为我没有人物不持枪的动画,而且我目前不会自己做角色动画)

8.细节调整:做完上面的步骤后发现角色收枪动画手并没有达到对应的武器插槽位置,导致有种武器被吸铁石吸上去的感觉,这里将收枪动画在Sequence中编辑一下。

找到手伸到背部最高的那一帧,通过不断调整骨骼的位置使得角色的手部处于一个正确的位置。接着打开曲线删掉调整的那一帧附近的帧,最后选中附近剩余的帧进行三次插值运算让UE自动补全动画即可。

结束动画编辑后,导出到序列替换原来蒙太奇中的动画序列即可。