这一节主要以两个实例说明 IK 拾取对象的用法
1.开门动作
2.骑独轮车
开门动作,先做一个开门的姿势,然后给门一个旋转的动画:
![6496250-257310af4a020f9c.png](https://i-blog.csdnimg.cn/blog_migrate/af78b3f763e8b55ee70800944b75452b.png)
![6496250-c33ea3dd84bcdea8.png](https://i-blog.csdnimg.cn/blog_migrate/ce53ba2f748a8ddc444897b2cdd72e30.png)
接下来要做的就是,让手臂跟着门一起运动,可以看到门的运动轨迹,虽然是弧线,但是是非常规则的弧线,非常有规律的。可以想象一下,如果用正向动力学,使用胳膊带动手,当然可以做一个弧线,但是没有办法做很规则的弧线,因为这里是要和门的轨迹一样,实质上是受门的约束的,而正向动力学是不受约束的,很难和们的轨迹一模一样。
因为手是和门把手交互的,是受把手的约束,是IK,但是,在前面也已经做过,如果把手的两个关键帧,打成IK,它的运动其实是直线(比如前面的做的招手和擦玻璃),那使用什么办法呢,这里就要用到拾取对象了。
还和之前一样,先给手打上IK关键帧:
![6496250-783912e54ff87c06.png](https://i-blog.csdnimg.cn/blog_migrate/e1101aa85560d06afbac5162fa9110d1.png)
上几节课提到了,Body 和object的两种方式,这里依然是使用Object的方式,仔细看的话,这个Object下面其实是可以拾取物体的,前面几节课都没有用到,如果不拾取,默认的是以世界空间作为对象的。这里我们拾取一下门把手:
![6496250-178ea374e84052e8.png](https://i-blog.csdnimg.cn/blog_migrate/37dddc4ee19ffdf51c33eaba090a7054.png)
这时候会弹出一个提示,意思是这个操作会把 IK混合数值改为0. 点击确定:
![6496250-a547e1675c254805.png](https://i-blog.csdnimg.cn/blog_migrate/7ea75e62533a9e97b5dc6a1e64c3e2db.png)
然后这个门把手就添加进来的,这时候,我们拖动时间轴,发现手并没有跟着把手运动:
![6496250-66dc1f4b515e1771.png](https://i-blog.csdnimg.cn/blog_migrate/00d605521813cf1e2858309776cf8be7.png)
还记得那个提示框吗,仔细看一下我们的IK混合,数值被改为0了:
![6496250-8eec87745804778e.png](https://i-blog.csdnimg.cn/blog_migrate/1ec77ab901eb33abd21f98461f0e7b2d.png)
重新改回到1,这时候再次拖动时间轴:
![6496250-bdb7eb85493b1ec4.png](https://i-blog.csdnimg.cn/blog_migrate/37a9e3277476dd8ba7daaaa147572374.png)
发现手臂跟着门运动了!,这个例子其实是一个反作用力的例子,门带动把手,把手反作用与手腕,手腕有带动胳膊,但是动视觉上来看,好像是人去拉的门,把门拉开,但其实是给门做的动画而不是手臂,这也是很典型的例子,有些时候,做动画不能完全按照现实去走,有时候用反想动力学去做看似是正向动力学的动画反而简单很多,这在后面会经常用到。
2.骑脚踏车
![6496250-75ca92bfec12026f.png](https://i-blog.csdnimg.cn/blog_migrate/8088c17b668a7b7a3302fa16ef630ea5.png)
已经做了一个简易的独轮车,我们知道这种有踏板的独轮车的运动规律,就是踏板虽然随着轮子转而转,但是自身是不转的,当然实现这种规律的方法很多,这里面就使用约束里面的位置约束来实现。
首先先把踏板的轴连接到轮子上,让它随着轮子转而转:
![6496250-3b666ff1667d354e.png](https://i-blog.csdnimg.cn/blog_migrate/9d03b61c974242164b04abebeeb22c48.png)
然后使用位置约束,把踏板约束的到轴上:
![6496250-40c5f10d958774a2.png](https://i-blog.csdnimg.cn/blog_migrate/827445ebb4122d5f58a6b55f492d44aa.png)
发现连接完以后,位置便宜了,这时候需要把保持初始偏移给勾上:
![6496250-9163f573444bd845.png](https://i-blog.csdnimg.cn/blog_migrate/6672a8aa5cba0ceef71c9baa61211958.png)
![6496250-c48488bf7d3267f2.png](https://i-blog.csdnimg.cn/blog_migrate/d34513d5cdd10a0e88771bc755ea7548.png)
这样位置才正确,另一半也做相同的操作。
![6496250-d4ed69919f72871e.png](https://i-blog.csdnimg.cn/blog_migrate/014db22cf397909e43a037210909b606.png)
再次旋转轮子,发现踏板就对了,先给轮子一段旋转动画,然后把骨骼放到轮子上,调整好位置:
![6496250-1e3db7bb2e483bb5.png](https://i-blog.csdnimg.cn/blog_migrate/b025e1dfadc54ec33933f4b9605c6552.png)
跟之前一样,给两只脚打上IK关键帧,这一次,为了避免弹出对话框,数字自动改回去,所以,先给两只脚添加 IK对象,然后再打关键帧:
![6496250-f23d48593e754e59.png](https://i-blog.csdnimg.cn/blog_migrate/2375d0409fb36f8489db885aa9f270d3.png)
给两只脚都添加好,IK对象
![6496250-7dff006197d82508.png](https://i-blog.csdnimg.cn/blog_migrate/cc924914c9e1587905c2e80850f47d66.png)
拖动时间轴,发现脚就跟着脚踏板一起动了。
![6496250-ea88e302250a96ea.png](https://i-blog.csdnimg.cn/blog_migrate/dc910c08cf558534a16243973b41bfcf.png)
最终动画:
![6496250-7b52bc07d490394b.gif](https://i-blog.csdnimg.cn/blog_migrate/51708c3bfa79a7f3a5ac6c3fc49fcf53.gif)