前言
Unity 除了可以使用帧动画外,还提供了制作骨骼动画的工具,工具包应该是2018左右的版本加入的,目前我使用的2020.3版本已经可以直接使用了,老一点的版本需要在package manager 中下载相应的包才行。
本文参考:https://www.bilibili.com/video/BV1vt411i7p3
准备
在建立骨骼动画之前,最好先准备一张资源图片。
如上图,我将一个火柴人肢解了,这样将四肢分解之后做骨骼动画效果相对会好一些。当然直接使用一整张图也是可以的,但是经过测试,像是手臂和大腿这种需要扭动幅度较大的地方,使用整张图片会导致图形旋转的地方畸变,也可能是我水平不够。。
编辑骨骼
在sprite Editor中打开资源文件
然后点击Sprite Editor 选择下拉菜单中的skinning Editor 可以看到这样的画面
在左边可以看到三个悬浮窗口,依次是骨骼、几何形状、权重的编辑器。
- Preview Pose 预览,可以在这个界面中调整骨骼的位置,预览资源图片跟随骨骼的变动而变动, 需要注意的是,必须为资源生成几何形状图片才会跟随骨骼移动。
- Edit Bone 编辑骨骼,可以编辑已经创建好的骨骼,调整骨骼的位置,长短,删除。
- Create Bone 创建骨骼,双击要创建骨骼的部位,光标会变成小圆圈,然后左键就可以创建连续的骨骼了,右键可以取消连续创建。然后再次左键选中骨骼,可以创建子骨骼。
- Split Bone 骨骼切分,可以将骨骼一分为二
以上是关于骨骼编辑的工具,其他工具用到的时候再做介绍。
以上是创建骨骼的过程,在躯干上创建两个连续的骨骼,然后在手臂上创建了两个子骨骼,可以将子骨骼理解为分支,可以有多条分支的子骨骼。
简单的加上骨骼
如果你想让物体可以尽量做多的动作,那么久尽量多的添加骨骼,骨骼是不能弯曲的,只有骨骼的连接处才可以弯曲,可以将这些点理解为关节,那么当然是关节越多越灵活。
添加几何形状
- Auto Geometry 自动生成集合形状,一般使用自动生成然后在手动微调。
- Edit Geometry 编辑多边形,可以调整多边形顶点的位置。
- Create Vertex 创建顶点
- Create Edge 创建边
- Split Edge 分割边
点击自动生成多边形
在右下角会看到这窗口。
- outline Detail 多边形精度,这个值越高生成的多边形越精细,与之相对的消耗更多的性能。
- Alpha Tolerance 透明度容忍度,这个值代表生成多边形时,会忽略掉透明度小于这个值的图片位置。
- Subdivision 多边形顶点数量
- Weighs 是否自动生成权重
根据需求设置参数,点击Generate For Selected 生成多边形。
这个时候在Preview Pose (预览)页面就可以预览动画的效果了。
就是这么个效果,当然其实是要给骨骼设置权重才能预览的,不过我在生成多边形勾选了自动生成权重,所以可以预览。
生成骨骼权重
- Auto Weights 自动生成权重
- Weight Slider 编辑顶点,边的权重
- Weight Brush 权重笔刷,选中骨骼之后可以用笔刷增加权重
- Bone Influence 选择骨骼用到的sprite
自动生成骨骼是,如果一个封闭区域只有一个根骨骼,那么区域内所有顶点的权重都是这跟骨骼的,但是一个区域内有多根骨骼的时候,就会根据骨骼的长度和位置来调整权重,大多数时候需要手动调整权重的情况也是这种。
这是自动添加完权重之后的样子,区域的颜色对应着童颜颜色的骨骼的权重,在使用Weight Brush 时也是通过给区域刷上颜色表示权重。
权重可以理解为,当骨骼移动时,区域中的顶点要不要跟着骨骼移动,一般来说拥有骨骼权重的顶点会跟着骨骼移动。
这里的多边形用于骨骼移动时,对图形的变换,与用于碰撞的不是同一个
骨骼深度
像是骨骼在这样移动时,会有部分会有重叠的情况,这个时候需要让开发者决定那一部分显示在上面,这个是由骨骼的深度决定,在窗口的右下角可以看到骨骼的Name属性以外还有Depth属性。
Depth属性决定了骨骼重叠时,哪一根骨骼显示在前面,这个值越大,显示的位置就越靠前,两个骨骼的深度可以是重复的。
拼装
处理好以上这些东西之后,就可以使用资源生成一个sprite,然后添加控件 Sprite Skin 在控件中点击Create Bones 就可以在Scene Window 中看到精灵身上的骨骼了。
移动骨骼可以将精灵拼装起来,如上。
2D IK
这一步不是必须的,只是为了更好的控制骨骼,在拼装好的的精灵上添加Ik链,模拟骨骼运动时的连锁反应,所以不添加IK链也是可以的,只不过需要一根一根的去逐一调整骨骼的位置。
在精灵的Inspector Window 中添加一个 Ik Manager 2D组件,然后在组件里,添加IK Solvers
添加时选择CCD,这应该是IK链涉及到的模拟算法,暂时不太了解。
添加完之后,可以在Hierarchy Window 看到精灵多了一个子对象,这就是Ik链的对象。
- Effector 指骨骼对象,选择在Ik链中的起始骨骼,比如要为手臂添加Ik链,那么这里应该设置为手掌位置的骨骼。
- Chain Length 链条长度,即这个Ik链在Effector 骨骼之后,需要链接多少条骨骼。
设置好这两个属性之后,点击Create target 创建与精灵的联系。
设置好之后,在Scene Window 中可以看到精灵的手掌(Effector 骨骼)上有一个白色的小圆圈,拖动这个小圆圈就可以调整整个链条的姿态。
如果不添加IK链,拖动效果是这样的
前面的骨骼移动不会影响后面的,后面的是会影响前面的。
这就是IK链的作用了,如果你希望在手臂移动的时候胸部或者腰部也跟着移动,可以调整IK链的长度,不过长度边长之后可以移动的位置也会收到限制,这个可以根据自己的需要调整。
录制动画
在菜单中点击Window->Animation->Animation调出动画编辑器,选中精灵之后Create 一个新的Animation 文件。
点击录制按钮,然后将右边的代表动画进度条调整到你想录制的帧数,之后再Scene Window中调整精灵的动作,Animation 编辑器会自动将上一个属性平滑的过度到当前调整的动作,然后多次重复这个操作录制动画。
你甚至可以让它打一套咏春,如果你足够有耐心。
在编辑骨骼动画时,可以先在网上找到一些动作的分解图
像是这样的,然后一个动作一个动作跟着录制,就可以得到一个不错的跑步的动画了。
文章评论
太厉害了
太牛了学习到了,非常感谢博主
看起来挺好玩的
@芭比 确实好玩,做一些小动画,感觉用这个技术就已经足够了,而且Unity搭建场景也很方便。