首先,提出问题,角色的脚不应该完全跟着动画走,要考虑地面,如下图,右脚是悬空的。

脚部IK

我们需要一种方法,计算落脚点,根据落脚点计算腿部骨骼的姿态。

首先,创建一个控制绑定蓝图,给动画蓝图加一个控制绑定节点,把控制绑定加进去,接下来的事情都是在控制绑定蓝图中完成的。

我们的思路是,先计算落脚点,然后用全形体IK解算,把脚的位置计算过去。

计算落脚点

我们将落脚点存储在两个控制点上

在我的模板骨架上只有必要的骨骼,并没有脚的IK骨骼,所以我手动创建两个点作为IK控制点,选中脚部(脚后跟的点,不是脚趾),创建控制点(点击Add Controls For Selected创建到根骨外面)。

落脚点的X和Y应当和当前脚的位置相同,重点在于计算Z坐标上。

这里我们用射线检测去从脚的位置检测地面。

射线检测传入和返回的位置都是相对于骨骼网格体的,所以坐标不用转换。

拿到射线检测位置的Z坐标,记录下来,作为目标位置,为了避免突变,实际显示的位置是从目标位置插值得来的。

然后给控制点赋值,控制点的XY是脚的XY,Z从原本脚的Z上添加偏移。

IK解算

创建一个全形体解算节点,将跟锁定到输入。

全形体解算解算左右脚,变换传入对应控制点的变换。

到此,对于比站立位置高的台阶,角色可以很好的把脚踏上去:

但是对于比站立位置低的台阶似乎没用呢,为什么呢?

因为她就这么长的腿,没法伸下去。

对于这个问题,站低一点不就好了嘛。

于是:


完整的蓝图:

手部IK

这个嘛···比脚简单,一笔带过咯

我们会通过蓝图给动画蓝图左右手各一个世界变换,表示手要尝试去触摸的地方。

动画蓝图拿到这个世界变换应当先计算这个世界变换相对于骨骼网格体的变换(用创建相对变换节点)

像脚部一样,我们给手部创建两个控制点,这里创建的两个手部控制点需要将各个变换都清零,与跟骨骼对齐,否则无法从动画蓝图正确设置变换。

用另外一个全形体IK解算两只手。


我能想到的,最大的成功就是无愧于自己的心。