前言
说到IK(反向动力学),我在上一个足球项目中有用到,比如守门员接球,美术只是提供几种接球动作,例如:跳起接球、蹲下抱球、左扑、右扑,这里左扑和右扑可以优化,设置动画的mirror选项,mirror就好比镜面,如果左边扑救的动画添加上mirror选项就能够有右扑的效果,当然这个不是这篇文章的主讲,简单的讲反向动力学就是设置子关节的位置或者形态反向计算父关节的位置或者形态,例如守门员要实现扑球的动作,预先计算球到球门的位置,然后手关节设置到这个位置,并且设置当前状态到那个位置所需要的时间。再举个栗子,例如吃鸡游戏,我们控制的角色要捡地上的装备,我们只需要将手的位置放置到地面装备上,Unity会在Time.deltime中每一小段时间移动一点位移,最终移动到我们想要移动的位置,Unity中对应的API是SetMarchTarget。Unity中打开动画的IK的操作 Window->Animator打开动画控制器窗口,勾选IK Pass。本文的主要讲解的是如何通过FinalIK插件来实现角色脚掌贴合地面,当然插件中给我们实现的一个样例Grounder,主要就是在角色GameObject上添加上GrounderIK组件即可。
思路
我们当然可以参照Grounder的例子来手动给每个角色模型添加上IK,但这种重复性的机械操作就需要程序来造轮子解决,让配置的工作交给策划,GrounderIK下面的子组件LimbIK需要设置三个Bone节点,分别是大腿根部节点,小腿关节节点,脚掌关键节点,但由于事先没有跟美术商量好,不然的话可以将我们要设置的三个关节点在GameObject特殊标记起来,也由于各个模型的关节名和位置没有统一,所以我下面做的工具就讲这个选择权交给策划,由策划来点击选择这是想要设置的关节点。
效果
我们看一下Final IK的实现脚步贴合地面的效果,原本Robot的脚是不会贴合地面的。
原来的模型是脚不贴着地面的
工具操作
代码
1 | using System.Collections.Generic; |
GrounderIK介绍
- Weight 权重
- Solver Layers 脚射线监测的地面
- Solver MaxStep 脚抬起的最大高度 譬如爬楼梯,如果楼梯过高,脚就不会踩上去
- Solver Offset 脚距离地面的一个高度差
- Solver FootSpeed 腿到达目标位置的速度
- Solver Radius 脚发出的圆形的射线监测
- Solver Prediction 人物走台阶,如果设置的比较低会出现穿模的现象,设置的高一点就不会
- Solver FootRotation Weight 脚步旋转的权重,人物在斜坡上就能看出来
- Solver Pelvis Speed 盆骨移动的速度
- Solver Pelvis Damper 盆骨位移的缓冲效果
- Solver Root Sphere Cast 脚跟地面射线监测的距离
- Solver Quality 是发射几条射线监测,举例:我们人物一个脚在斜坡上,另外一个脚在侧边悬空,如果设置Fast另外一个脚就悬空,如果Best另外一个脚就贴着侧面
更多相关的文章
- https://docs.unity3d.com/Manual/InverseKinematics.html Unity Docs
- https://www.xuanyusong.com/archives/2264 雨凇Momo
- https://www.cnblogs.com/hammerc/p/4829943.html 阿诚de窝
- http://zh.esotericsoftware.com/spine-ik-constraints
- https://www.bilibili.com/video/av24376712/ 视频教程
案例下载
https://gitee.com/dingxiaowei/FinalIK