文章目录
-
- 简介
- 为骨骼添加IK骨骼
- [control rig](#control rig)
-
- [新建control rig](#新建control rig)
- [control rig导入骨骼](#control rig导入骨骼)
- 蓝图代码
-
- [1 创建脚底的检测函数](#1 创建脚底的检测函数)
- [2 调用脚底的检测函数](#2 调用脚底的检测函数)
- [3 目标位置插值](#3 目标位置插值)
- [4 寻找位置更靠下的脚,把这个偏移量当作盆骨的偏移量(总有一条腿是伸直的)](#4 寻找位置更靠下的脚,把这个偏移量当作盆骨的偏移量(总有一条腿是伸直的))
- [5 分别偏移左右的ik骨骼和真正的盆骨骨骼](#5 分别偏移左右的ik骨骼和真正的盆骨骨骼)
- [6 使用IK移动真正的左脚和右脚骨骼](#6 使用IK移动真正的左脚和右脚骨骼)
- 动画蓝图
简介
从两个脚底分别向下发射射线,检测地面位置,从两个射线中找到更靠下的距离A,通过盆骨下移长度A实现人物整体往下移, 使用controlrig Ik来控制腿的伸缩
效果

为骨骼添加IK骨骼
添加IK骨骼的目的是为了确保发射射线时有一个固定的起点,让真正的骨骼去移向射线的终点,如果用真正的骨骼当起点,那么位置会出先错误的偏移。
有些模型带有IK骨骼,就是这些灰色的骨骼

如果没有自带的IK骨骼,可以手动创建虚拟骨骼,和IK骨骼的功能是一样的
必须选中Root,然后选择添加虚拟骨骼,然后选择一根骨骼,即可添加虚拟骨骼,虚拟骨骼不需要层级结构就可以工作,但是也可以在已有的虚拟骨骼上继续右键添加子级虚拟骨骼

control rig
control rig用来实现ik效果
新建control rig
资源管理器,右键 动画/control rig/控制绑定

父类选择controlrig,即可创建一个control rig

control rig导入骨骼
切换到控制绑定,然后点击绿色部分,即可导入新的骨骼

蓝图代码
1 创建脚底的检测函数
点击"我的蓝图"
新建一个函数

函数默认有一个输入节点和一个输出节点
点击输入节点,添加输入参数,参数类型为 rig element key

点击输出系节点,添加返回值为 类型为vector

如下编写方法体

1 作用是获取骨骼的变换,也就是位置缩放旋转等信息
新创建的节点名称会爆红但是没有关系,直接点击项目收起来,连接上输入参数,然后确保空间是 全局空间 即可

2 让监测点稍微水平偏移一点,防止射线打到自己的脚
使用这个新加节点

新加的节点没有类型,可以右键点击输入引脚,修改为Vector

3 射线的起点,骨骼上方50厘米
4 射线的终点,骨骼下方100厘米 ,也就是说,射线的最终检测范围是150厘米,这就是脚可以自适应的最大移动范围
5 球形射线检测,按下图添加

球型追踪器长这样,实际上是个胶囊体

2 调用脚底的检测函数
打开 向前解析图表

创建如下变量

ShouldDoIKTrace
当玩家移动、死亡时,不应该进行Ik检测,只有停下来时才进行IK检测
下边两个用来记录射线检测的结果,只保留Z分量即可
如下编写蓝图,注意这里属性节点时蓝色的

3 目标位置插值
让脚部的动作逐渐变化,直接变过去太僵硬
创建如下变量,这是真正的脚部骨骼要跟随的点

如下编写蓝图,注意插值的最后两个属性默认从10改成了15,这个属性是插值的步长

1和2 分别使用插值,将射线检测的结果逐渐插值到真正用来偏移的结果上
插值节点用的这个

4 寻找位置更靠下的脚,把这个偏移量当作盆骨的偏移量(总有一条腿是伸直的)
用更靠下的脚当作盆骨偏移的参考
盆骨是所有骨骼的根骨骼,偏移盆骨,就能让整个骨架偏移
添加新属性,记录盆骨的偏移量

如下编写蓝图,ctrolrig有if节点可以代替branch

5 分别偏移左右的ik骨骼和真正的盆骨骨骼
如下编写蓝图
使用modify transfroms节点变换骨骼
设置好要变换的骨骼,只在z方向偏移,以及在additive全局

默认的modify transforms节点长这样,直接点击第一个元素0,选择骨骼,不用管数组,元素0就是数组的第一个元素

6 使用IK移动真正的左脚和右脚骨骼
使用full body ik,根骨骼选择pelvis

这样左脚和右脚就会跟随自己的ik骨骼
动画蓝图
添加一个绑定控制

将上边创建的控制绑定类赋值给控制绑定节点

我们在控制绑定类里的创建的ShouldDoIKTrace会出现的输入列表里,点击"使用引脚",控制绑定节点就会出现引脚
然后我们调用isFalling,来让玩家在空中时不再使用ik,isFalling是第三人称示例角色动画蓝图自带的属性,他的实现原理如下

完成这一步后,我的ik就正常了,但是教程里表现仍然不正常,后边又根据速度进行了判断,只有在玩家移动时才使用ik
