UE4 Advance Locomotion V4 学习

这篇博客记录了作者在学习UE4 Advanced Locomotion System V4(ALS)过程中的个人笔记,分享了3D游戏开发中角色移动控制的学习体验,同时也欢迎读者指正错误。
摘要由CSDN通过智能技术生成

这是个人学习ALS过程中的一点笔记,不对的地方谢谢指出~

开始看
在跑步动画中进行脚落地,摄像机摇动,和左右脚区分,这个weight——gait曲线用于区分动画,使用见下面
针对小跑和快跑,使用当前的相对加速正前方分量x值【0-1】来进行混合
制动时的最大减速度
UnrotateVector将世界坐标系变成局部坐标系,再来一次 RotateVector 将 会把局部坐标系变成世界坐标系。
UnRotateVector作用是让Vector A绕着原点逆时针旋转 B。
得到基于当前角色旋转值的相对加速度【所以后面要UnRotateVector,因为是当前旋转的相对值】,并将其归一化到-1到1,以表示最大制动减速度和最大加速度
前进和后退,跑步和走路的所有混合动画,LR指定左右,F前进,B后退,指定Stride步幅和walkrun 走路跑步混合值,standing play Rate立姿状态下动画速度。这里为各个姿势都设立了同步组。
计算WalkRunBlend,简单的0和1判断
计算步幅大小
计算步幅混合。该值在混合空间中用于缩放步幅(脚移动的距离),以便角色可以以不同的移动速度行走或跑步。它还允许行走或跑步步态动画独立混合,同时仍将动画速度与移动速度相匹配,防止角色需要播放半行走+半跑步混合。曲线用于将步幅量映射到速度以实现最大控制。
strideBlendNWalk和strideBlendNRun是两个曲线
walk run,依据速度进行两个曲线的插值
这里使用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,使得随着步幅或比例变小,播放速率增加。
这里speed都是提前定义好的,walk speed为150,run speed为350,animated sprint speed为600,由于sprint的weight值是3,所以偏移为-2
通过将角色的速度除以动画速度来计算蹲起播放速率。该值需要与站立播放速率分开,以改善运动中从蹲下到站立的混合效果。
整体逻辑和计算立姿状态差不多,crouch speed为150
回到
混合计算所有移动动画的循环,先将各个姿势保存起来以便重用。针对前进动画先判断是普通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,该值表示角色在“Cir
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值