RootMotion控制
前言
根骨骼运动(RootMotion)的位移都是固定的, 但是我们在实际运用中经常想动态的控制角色的位置和旋转,比如挥砍动作在怪物跟前了就应该停止位移,翻墙动作与障碍物的距离适配等
本文实现了2个方案, 其中之一就包括基于最近上线的UE5新插件RootMotionWarping的方案
如上图我们有一个翻越障碍物的动作, 此动作的起始到手撑地的前方向位移大约是120-140之间, Z方向位移大约100出头,翻越后半段前方向位移大约200不到
不需要太精确
方案一:手动计算位移
此方案我们关闭RootMotion
, 提取所有位移信息,然后我们手动来刷新位置,同时根据障碍物的情况来动态控制位移信息
首先我们需要生成根骨骼运动的位移信息,可以通过一个动画修改器AnimationModifier
来得到
主要内容如下截图
然后得到曲线
然后用一个辅助宏来处理位移
XYPlaneDistance
是开始播放动画与距离障碍物的距离,通过射线检测得到
实测效果感觉手部位置用100-XYPlaneDistance
比较合适,因为手的位移跟root
骨骼有区别
而ZScale
我们通过射线检测得到障碍物顶部的点到地面的距离与我们动画Z位移的百分比
- 简单的测试效果
这里有个小问题,如果障碍物太宽, 那么我们需要对后半段的位移进行额外处理,不然就直接站上去了
方案二:MotionWarping
UE5新出现在动画模块内的一个插件,专门来控制RootMotion
的位移
主要通过一个动画通知来实现, 然后就在合适的时机(播放蒙太奇之前)设置对应的数据即可
通过很多射线组合得到障碍物合适的顶部点以及翻越后的着地点,直接通过上图的方法设置即可
然后我们通过判断障碍物大小来决定播放哪个动画(另外一个动画为UE5实例项目的翻越动画)