前言
今天有小伙伴问我虚幻引擎中动画资源Root Motion选项中的Force Root Lock的作用是什么,老王对这个选项的功能理解也是比较含糊的,查阅了官方文档,其描述也比较费解。索性通过实验的方式理解一下它的作用吧。
该选项的位置
官方文档中的解释
实验准备
项目设置和资源准备
- 项目:第三人称横板项目
- 动画资源:Polygonmaker资源包,该套资源具有带根运动的动画
默认动画蓝图设置
将地面运动的混合空间替换为具有跟运动的动画资源"Anim_Regular_climb_up"
为了让跟运动在蓝图中生效,将Root Motion Mode设置为Root Motion from Everything
角色蓝图设置
将Character Movement组件中 Default Land Movement Mode设置为Flying,这样可以屏蔽掉重力的干扰
并且我在角色的根骨骼上添加了一个红色的方块,以便于观察根骨骼的变化
实验
1. 不开启Root Motion和Force Root Lock
[演示视频]不开启RM和Force Root Lock
根骨骼移动,但不会影响胶囊体的位置,此时Skeletal Mesh会“逃出”胶囊体范围
2. 仅开启Root Motion
[演示视频]仅开启Root Motion
根骨骼移动,并且会反向影响胶囊体的位置(顺便可以看到跟运动会受物理碰撞影响)
3. 仅开启Force Root Lock
仅开启Force Root Lock
根骨骼的移动被清零,自然也不会影响胶囊体位置
4. 开启Root Motion和Force Root Lock
[演示视频]开启RM和Force Root Lock
和仅开启Root Motion效果相同,说明Force Root Lock仅在Root Motion未开启时才会产生作用
应用场景
关于这个选项的应用场景,我找到了国外社区中一个网友提出的问题,有些时候我们并不想使用根运动,但是由于动画资源中的根骨骼有位移数据(即本身是RootMotion动画资源),在游戏中这个根骨骼位移数据虽然不能影响胶囊体的移动,但是会使角色“逃出”胶囊体范围,这时开启“Force Root Lock”可以强制将根骨骼位移数清零,并将角色限制在胶囊体范围之内。
小结
以上是通过实验得出的结论,由于没有深入研究过源代码,有理解不当之处敬请指正。