Unity中的逆向动力学

前向动力学是通过父关节点的移动来计算子关节点的位置,这样一步步确定骨骼链上所有关节的位置。而逆向动力学(Inverse Kinematics,后文简称IK):通过子关节的位置,反求推导出所在骨骼链上n级父关节点的位置。

逆向动力学的优缺点:

  • 优点:工作效率高,不需要手动控制的关节数目。
  • 缺点:解方程需要耗费较多的计算机资源。

比如在射击游戏中,我们要设置一个角色左手右手的持枪姿势,同时目光看向枪口瞄准处。直接设置左手、右手以及视线最终落在枪身上的位置。通过IK可以反推算出左右手臂以及头部的骨骼链。

在Unity引擎中,可以以如下步骤,实现上述任务:

① 有一个具有有效Avatar的角色模型

② 为该角色创建一个 至少含有一个animation的 Animator Controller 。然后在该动画层中勾选IK Pass选项。

③ 写一个脚本,可以简单命名为IKController。其中只是简单设置一些IK目标。关键语句如下:

animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1);
animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1); animator.SetIKPosition(AvatarIKGoal.RightHand,rightHandObj.position);
animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandObj.rotation);

④ 将脚本绑定在角色对象上,再在场景中设置一些空对象。将空对象绑定在IKController上。空对象的transfer组件中的position和rotation分量会以IK形式,影响模型。具体看步骤3中的脚本。

⑤ 进入play模式,就可以看到IK的作用了。

来源:CSDN,作者:nikoong,转载此文目的在于传递更多信息,版权归原作者所有。
原文:https://blog.csdn.net/nikoong/article/details/84857549
版权声明:本文为博主原创文章,转载请附上博文链接!

推荐阅读