本文主要是介绍UE4 Advance Locomotion V4 学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这是个人学习ALS过程中的一点笔记,不对的地方谢谢指出~
从
开始看


在跑步动画中进行脚落地,摄像机摇动,和左右脚区分,这个weight——gait曲线用于区分动画,使用见下面

针对小跑和快跑,使用当前的相对加速正前方分量x值【0-1】来进行混合


UnRotateVector作用是让Vector A绕着原点逆时针旋转 B。
RotateVector作用是让Vector A绕着原点顺时针旋转 B。 【AdvancedLocomotionSystemV】使用 UnrotateVector 和 UnrotateVector 增加向量值的原因_Tanzq的博客-CSDN博客

得到基于当前角色旋转值的相对加速度【所以后面要UnRotateVector,因为是当前旋转的相对值】,并将其归一化到-1到1,以表示最大制动减速度和最大加速度


前进和后退,跑步和走路的所有混合动画,LR指定左右,F前进,B后退,指定Stride步幅和walkrun 走路跑步混合值,standing play Rate立姿状态下动画速度。这里为各个姿势都设立了同步组。
https://docs.unrealengine.com/4.27/zh-CN/AnimatingObjects/SkeletalMeshAnimation/SyncGroups/


计算步幅混合。该值在混合空间中用于缩放步幅(脚移动的距离),以便角色可以以不同的移动速度行走或跑步。它还允许行走或跑步步态动画独立混合,同时仍将动画速度与移动速度相匹配,防止角色需要播放半行走+半跑步混合。曲线用于将步幅量映射到速度以实现最大控制。
strideBlendNWalk和strideBlendNRun是两个曲线



这里使用get anim curve clamped自定义的宏,获取weight_gait曲线值, walk是1,run是2, sprint是3,这里加上了-1的偏移,所以walk用上面n walk 的曲线,run和sprint用run的曲线

后续通过下蹲的动画中CLF曲线去混合跑步走路/下蹲状态的步幅,下蹲状态下步幅为walk的大小

计算立姿状态下动画速率,通过将角色的速度除以每个步态的动画速度来计算播放速率。lerpd alpha由存在于每个anim中的“weight_gait”动画曲线确定,因此播放速率始终与当前混合动画同步。该值还除以步幅和mesh scale,使得随着步幅或比例变小,播放速率增加。

通过将角色的速度除以动画速度来计算蹲起播放速率。该值需要与站立播放速率分开,以改善运动中从蹲下到站立的混合效果。

回到
中



混合计算所有移动动画的循环,先将各个姿势保存起来以便重用。针对前进动画先判断是普通forward还是冲刺,然后判断是否应用附加着陆动画中的mask_sprint曲线,不用mask可能会着陆时压迫膝盖导致ik问题,看下来是着陆时先播放普通forward动画,再过渡到现在的动画

接着计算方向
该状态机基于运动方向和“HipOrientation\u Bias”曲线将方向循环混合在一起,以便在切换方向或更改hip旋转时实现更好的混合。
定义了一个方向枚举-前后左右,和六个移动方向,左前、前、右前、左后、后、右后




这里动画中使用了 过渡规则共享(transition rule sharing) 以提高效率, 即将一个过度规则设置(提升)为可共享的,那么当遇到了相同的过度规则,我们只需要设置为这个过渡规则的引用就可以了,同时更改其中一个引用规则,其它使用该共享规则的地方也会同步更新了。每种规则是一种颜色的箭头。详见大神: [玩转UE4/UE5动画系统>基础篇] 之 过渡规则共享(Transition Rule Sharing)-提升效率的小技巧_开发游戏的老王-CSDN博客
还使用了过渡渐入渐出共享,使用的changedirection blend profile中将下肢的权重设为2,比上肢优先级更高
这里黄色dir==right,绿色为dir == forward, 红色为dir = backward, 紫色为dir == left,同一大方向的左右转换还是比较简单的。同一侧方向的前后也通过forward和backward进行切换,而同一竖直方向上,左右无法直接切换,左前无法直接切换到右前,有中间一个过渡,而左前可以将方向标记为右直接切换到右后,改变竖直方向和水平方向。




↑粉色
条件只在前进和后退的左右状态下使用,这里用到了曲线Feet_Crossing,该曲线标识角色两腿是否交叉,==0为不交叉的状态,hiporientation_bias为臀部朝向曲线,小于-0.5朝左,大于0.5朝右,所以这里会同时根据dir值或者 脚步交叉+臀部方向去判断前后,同理
靛蓝色节点也是如此,在左侧动画下,双脚未交叉,臀向右,为后退,臀向左,为前进,在右侧动画下,双腿未交叉,臀向左为后退,臀向右为前进。这里白色的条件为非共享规则:双腿非交叉,臀部曲线绝对值在0.5内,当前动画混合权重为1,测了下不知道怎么触发这个规则。


进入具体的动画节点,MoveF为例:


这里使用了自定义结构体velocity blend 【F,B,L,R】四个方向的分量,去混合各个方向的动画,然后为Yaw Offset曲线设置当前角色的Yaw值,这个yaw值根据角色当前速度方向与控制方向的差值,在曲线中拿到。

这里的yaw值用于附加计算角色旋转插值速度【Update Grouded Rotation】,Smooth Character Rotation 用于平滑的旋转角色,Target Interp Speed是当前旋转到当前目标旋转的插值速度,Actor Interp Speed是当前角色旋转到目标旋转值的插值速度。这个Yaw Offset用于控制角色实现更真实自然的转动

这个velocity blend是这样计算的,取方向的单位向量【unrotate取当前旋转值的相对值】,将x方向映射到f和b分量上,将y方向映射到l和r分量上,通过这个变量计算去使用multiblend节点进行混合以实现比混合空间更好的方向混合效果。

这个函数则是去计算上文中提交的movement dir和yaw值。设置yaw offset。这些值会影响动画图形中的“YawOffset”曲线,并用于偏移角色旋转以实现更自然的移动。曲线允许对每个移动方向的偏移行为进行精细控制。


这里前进后退方向和左右方向的yaw 曲线值不尽相同,左为fb,右为lr。通过计算控制器与角色的yaw差值,在曲线中选择对应yawoffet值去设置曲线值。
接着计算movement dir,该值表示角色在“Cirection / Aiming”旋转模式期间相对于摄影机移动的方向,并在循环混合动画层中用于混合到适当的方向状态。

这里aiming rotation其实就是get control rotation值,和计算yaw值部分相同,计算角色自身yaw和控制器yaw差值,算出角色运动方
这篇关于UE4 Advance Locomotion V4 学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!