1:IK介绍
IK是Inverse Kinematic的缩写,也就是反向动力学。是根据骨骼的终节点来推算其他父节点的位置的一种方法。比如通过手的位置推算手腕、胳膊肘的骨骼的位置
应用:比如角色需要拿各种不同的东西,让角色的手能符合各种不同的东西的握持位置,如果不用IK,那么就需要制作非常多的动画,显然是没发这样做的
unity官方文档:反向动力学 - Unity 手册
https://docs.unity3d.com/cn/current/Manual/InverseKinematics.html
2:Animation Rigging组件
Animation Rigging组件的原理,该组件利用了IK(Inverse Kinematics)反向动力学的原理,通过建立骨骼约束来控制你所指定的某个骨骼的运动,例如可将手骨骼约束在一个点(比如球,或者鱼竿的握点,枪的握点),手将跟随握力点托进行移动和旋转,而左手父骨骼的运动将由组件根据IK来控制,从而实现手自然准确的握住需要握的点
可以在unity Package包里安装改组件
其基本组件如下:
1:Rig Builder 依赖Animator组件,所以将其与Avatar的Animator组件挂载于同一个物体上,支持同时控制多个Rigs,帮助我们实现动画融合。
2:Rig 约束控制组件,与骨骼根节点位于同一层级,将其添加到Rig Builder组件的Rig Layers列表
3:Two Bone IK Constraint :Root、Mid、Tip是我们想要进行约束的骨骼节点,Source Objects中的Target是新建的一个空节点,用于控制Avatar的胳膊到指定的位置
3:简单的实验(实现一个手臂握住球)
下面是简单做一个案例测试,我们先建立了一个父节点,Hand节点,然后Hand下面模拟一个手的节点,有Root->Middle->Tip可以想象成是手的三个关节点
可以看下我转动不同部位,就算类似一个手臂的感觉了
接下来就是建立Rig约束节点,然后建立Target节点,在通过Position Constraint位置约束组件把Target的位置约束到篮球的位置上,这样手就会跟着球的位置动了
可以看下这些节点关系
这样就大功告成了,最终运行后的效果如下,这里只是模拟手臂 看起来有点不自然
4:拓展
IK还能实现很多效果,比如人物眼睛跟随物体,手扶着墙走,感兴趣的可以在了解下FinalIK反向动力学插件,这个就更加强大了