
·来源于唐老狮的视频教学,仅作记录和感悟记录,方便日后复习或者查找
一、什么是IK

简单来说IK是反向动力学
正向动力学是父骨骼带动子骨骼移动
反向动力学是子骨骼带动父骨骼移动
二、IK包引入
去Package Manager里,在Advance中点击【Show Preview packages】
然后搜索2D IK即可
注意:2021版本以上该包集成进入了2D Animation中,所以如果已经安装了2D Animation包,那就不用再次导入了
三、IK的使用
1.制作好骨骼与蒙皮

这里用上一篇笔记中编辑好的人物,这里给权杖多加上很多骨骼
2.拖入场景中,并放在根物体下

3.在想要采用IK动力学的骨骼下创建空物体

并拖动到这个骨骼的末端位置
4.给根物体添加IK Manager脚本

相关参数

Chain(CCD)

点击【+】创建

然后会出现这么一个物体在根物体下

拖入之前创建的IK点,并选择这个IK点影响的父骨骼数量,然后点击创建目标,就会发现它自动创建了一个Target作为它的子物体并拖入了Target框中


这个时候就可以拖动这个Target物体,来控制它的移动啦!
可以看出类似辫子藤曼的效果,不过可以看到如果移动到太上面了,会直接反向
Chain(Fabrik)

它的设置过程和Chain(CCD)完全一样的

不同之处在于,它移动到上方不会直接镜像转过去,而是很丝滑地绕过去
limb

它的设置也和Chain(CCD)几乎一样,只是它不用去设置影响的父骨骼的数量

可以看到它自动帮我们决定了有哪些骨骼(不过这里不知道为什么少关联到了一个骨骼)

现在就可以看到这些骨骼相互影响移动地更自然也更方便了
可以通过其他的可以设置父骨骼数量的解算器(比如Chain(Fabrik))来添加上解决这个问题

还可以调整设置这些解算器影响到的骨骼的颜色

当觉得有些地方反向了的时候,可以按这个把它翻转过来
四、IK的意义

很显然,有了IK的帮助,我们的动画制作更加方便了

只要用短短几个关键帧的位置改变就做出了很丰富的动画效果,因为移动的时候会自动帮我们计算父骨骼应该移动的位置,这带来了很多的方便
五、结合代码
using UnityEngine;
public class MouseMoveHand : MonoBehaviour
{
public Transform ik_target; //放入IK的目标物体
private Vector3 mousePos; //鼠标位置
private float z; //ik_target的位置的z坐标
void Start()
{
print("MouseMoveHand Start");
Cursor.visible = true;
z = ik_target.position.z; //获取ik_target的位置的z坐标
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0)) {
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos.z = z;
ik_target.position = mousePos; //将鼠标位置作为IK的目标位置
}
}
}
效果如下:

六、总结
①IK动力学就是通过子骨骼的位移去计算父骨骼的移动,可以制作藤曼,鞭子,人物四肢灵活移动的效果
②可以搭配代码移动实现一些特别的效果,比如添加一些限制旋转的角度之类的。鼠标控制物体移动的时候,最好让他在视口的横截面上移动,那就要先保存要移动的物体的Z坐标,并之后把它修改给鼠标位置的


1923

被折叠的 条评论
为什么被折叠?



