本文主要是介绍[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot Lock系统(ALS V4实现方案详解),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本教程采用图文教程+视频教程的多元化形式,我会为不同的知识点选择适当的表达方式。教程内容将同步免费发布于 开发游戏的老王(知乎|CSDN)的专栏《玩转UE4/UE5动画系统》。教程中使用的资源及工程将以开源项目的形式更新到GitHub:玩转UE4上。
工程文件: 玩转UE4(GitHub)
0. 效果演示
本文提供的项目仅包含拆解版的Foot Lock系统,而Foot Lock系统需要结合其它系统才能体现出它的效果,所以我借用了ALS V4原作者的Youtube频道中Foot Lock系统的演示视频。
通过演示视频可以看到Foot Lock系统和Foot IK系统一样,也是一种装饰性的功能,而且是更精细的效果,不仔细观察甚至都感觉不出它的存在。简言之,Foot Lock系统的作用就是当角色在地面做旋转、翻滚等动作时防止重心脚打滑。
文章目录
- 0. 效果演示
- 1. 概述与原理
- 2. 动画蓝图 事件图
- 3. 动画蓝图 动画图
- 4. 动画曲线
1. 概述与原理
因为一定是脚与地面接触才涉及到Foot Lock,所以ALS V4的作者把它放在了Foot IK系统中实现,相当于Foot IK的子系统,所以阅读本文之前请先阅读本系列的另一篇教程《[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot IK系统(ALS V4实现方案详解)》
在Character中Mesh组件是Capsule的子组件,因此当Capsule有Transform(指:Location和Rotation)时Mesh也会有Transform,这时就不可避免地造成脚底打滑现象。于是,我们计算出当前脚部的Transform,再让它减去由Capsule产生的Transform,这样脚部就被Lock住了。
Foot Lock系统的实现包含两个核心方法:
- SetFootLocking方法: 获取脚部Transform(Location和Rotation)。
- SetFootLockOffsets方法: 计算由Capsule产生的Transform,反向补偿给脚部,这样脚部就被Lock住了。
具体哪些动画的哪些帧需要Foot Lock,分别由动画曲线FootLock_L和FootLock_R决定。
和Foot IK一样,动画蓝图的事件图负责计算数值,而动画图中的Transform(Modify)Bone负责实际的移动骨骼。
2. 动画蓝图 事件图
SetFootLocking方法
具体实现
注释:
- 获取FootLock曲线值Foot Lock Curve Value。
- 只有当Foot Lock Curve Value等于1或者Foot Lock Curve Value小于Current Foot Lock Alpha(当前的Foot Lock Alpha)时,才把Foot Lock Curve Value更新给Current Foot Lock Alpha。
换句话说只在Foot Lock Curve Value瞬时达到1或者Foot Lock Curve Value在逐渐减弱时才更新,只有这样Foot Lock才会有一种锁定的效果(你细品)。
- 如果Current Foot Lock Alpha等于1则记录当前的ik_foot在Component Space的Location(Current Foot Lock Location)和Rotation(Current Foot Lock Rotation)。
- 当Current Foot Lock Alpha大于0时,更新Foot Lock偏移量,即使此时胶囊体有位移,脚部也能保持不动。
SetFootLockOffsets方法
注释:
- 计算前后两帧之间Rotation Different(旋转差值)。
- 计算前后两帧之间Location Different(位置差值)。
注:先计算出世界坐标系上的偏移量,然后用Mesh的WorldRotation计算出Mesh空间的Location Difference
- 当前Location减去Location Different(Component Space)。
- 当前Rotation减去Rotation Different(Component Space)。
Location Different和Rotation Different都是用于反向补偿的偏移量。
3. 动画蓝图 动画图
Foot Lock在动画图中模块接入的位置
注:Transform(Modify)Bone的Translation/Rotation Mode 都是Replace Existing;Translation/Rotation Space 都是Component Space
4. 动画曲线
下面举几个ALS V4中使用了Foot Lock的动画资源的例子
动画资源:ALS_N_TurnIP_R90
动画资源:ALS_CLF_GetUpBackMontage_RH
动画资源:ALS_N_Mantle_1m_Montage_LH
它们的共同特征是当重心脚着地的一瞬间,重心脚的FootLock曲线值要设置为1。
另外还需要注意的是,FootLock只有在FootIK曲线有值的时候才有效,部分动画属于地面动画(包含在Locomotion状态机中),它们本身虽然没有FootIK曲线,是因为在状态机中使用了Modify Curve方法动态将FootIK曲线值设为1了。
这篇关于[玩转UE4/UE5动画系统>应用篇>功能模块] 之 Foot Lock系统(ALS V4实现方案详解)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!