Unity --- 反向动力学(IK)

对一个游戏物体使用反向动力学(IK)的前提是这个游戏物体具有动画器控制器

通过反向动力学我们可以实现:让我们的人物模型的胳膊一直指向某一个物体(在不需要动画的前提下)

为什么能实现呢? --- 首先我们要知道人的模型是由以节点模型为基础搭建而成的,通过反向动力学,我们可以调动节点来实现人物模型的运动

比如让手臂指向某一个物体a --- 我们调用反向动力学,使得手臂的手掌节点指向物体a,然后手掌节点调动关节节点再调用肩膀处的节点,实现整个手臂指向物体a

(理论上应该是先肩膀,再关节,再手掌,但是我们通过反向动力学实现了反向调用)


那么我们该如何使用反向动力学呢?

1.首先打开我们控制的游戏物体模型上挂载的脚本

2.创建一个位置变量来承接后面我们获取的要指向的游戏物体的坐标

3.创建好后保存脚本,然后去到unity的inspector界面,来到我们的脚本处,会发现多了一个目标选项,拖拽一个游戏物体进来后,unity会自动获取这个游戏物体的坐标并把它赋值给我们创建的位置变量

 4.在使用反向动力学(简称IK)之前我们要在游戏物体挂载的动画器控制器中找到会受到反向动力学影响的动画所属的图层,然后把这个图层的图层参数中的 IK处理勾选上

5.勾选好之后来到我们的脚本处,重写一个方法:与反向动力学(IK)相关的都写到这个方法中

 这个方法的参数是一个图层索引参数,如果我们不主动给的话默认是第0层,主动给的话就直接在方法中给layerIndex赋一个想给的图层索引就行

6.设置头部 IK 

第一步:将 IK反向动力学处理的权重设为1,默认权重是0(此时是不会播放IK处理的动画的),0到1之间则播放混合动画。只有权重为1的时候才会完全比方IK处理的动画

 第二步:进行IK处理,设置头部看向的位置

target是我们前面赋好值位置变量(装的是我们要指向的游戏物体的位置坐标)

上面这样IK处理后就会在原动画的基础上增加一个看向目标位置的动画(并不是说一直看向,而是在头部的扭转的合理范围内看向,超过合理扭转范围后结束看向操作)

 传两个参数,一个是要设置的部位,一个是IK权重值 

第一个position设置的是那个部位的位置要进行IK处理,以及IK处理的位置权重值

第二个ratation设置的是那个部位的旋转要进行IK处理,以及IK处理的位置权重值

(设置右手IK的那一部分的旋转设置处需要我们给一个四元数来控制右手的旋转)

猜你喜欢

转载自blog.csdn.net/qq_51947882/article/details/126545597