Unity 2D 骨骼动画

2022年5月7日 12454点热度 6人点赞 4条评论

前言

Unity 除了可以使用帧动画外,还提供了制作骨骼动画的工具,工具包应该是2018左右的版本加入的,目前我使用的2020.3版本已经可以直接使用了,老一点的版本需要在package manager 中下载相应的包才行。

本文参考:https://www.bilibili.com/video/BV1vt411i7p3

准备

在建立骨骼动画之前,最好先准备一张资源图片。

pop3

如上图,我将一个火柴人肢解了,这样将四肢分解之后做骨骼动画效果相对会好一些。当然直接使用一整张图也是可以的,但是经过测试,像是手臂和大腿这种需要扭动幅度较大的地方,使用整张图片会导致图形旋转的地方畸变,也可能是我水平不够。。

编辑骨骼

在sprite Editor中打开资源文件

image-20220506200135146

然后点击Sprite Editor 选择下拉菜单中的skinning Editor 可以看到这样的画面

image-20220506200403966

在左边可以看到三个悬浮窗口,依次是骨骼、几何形状、权重的编辑器。

image-20220506200513244

  1. Preview Pose 预览,可以在这个界面中调整骨骼的位置,预览资源图片跟随骨骼的变动而变动, 需要注意的是,必须为资源生成几何形状图片才会跟随骨骼移动。
  2. Edit Bone 编辑骨骼,可以编辑已经创建好的骨骼,调整骨骼的位置,长短,删除。
  3. Create Bone 创建骨骼,双击要创建骨骼的部位,光标会变成小圆圈,然后左键就可以创建连续的骨骼了,右键可以取消连续创建。然后再次左键选中骨骼,可以创建子骨骼。
  4. Split Bone 骨骼切分,可以将骨骼一分为二

以上是关于骨骼编辑的工具,其他工具用到的时候再做介绍。

Unity_skin1

以上是创建骨骼的过程,在躯干上创建两个连续的骨骼,然后在手臂上创建了两个子骨骼,可以将子骨骼理解为分支,可以有多条分支的子骨骼。

简单的加上骨骼

image-20220506202258754

如果你想让物体可以尽量做多的动作,那么久尽量多的添加骨骼,骨骼是不能弯曲的,只有骨骼的连接处才可以弯曲,可以将这些点理解为关节,那么当然是关节越多越灵活。

添加几何形状

image-20220506202745917

  1. Auto Geometry 自动生成集合形状,一般使用自动生成然后在手动微调。
  2. Edit Geometry 编辑多边形,可以调整多边形顶点的位置。
  3. Create Vertex 创建顶点
  4. Create Edge 创建边
  5. Split Edge 分割边

点击自动生成多边形

image-20220506203117525

在右下角会看到这窗口。

  1. outline Detail 多边形精度,这个值越高生成的多边形越精细,与之相对的消耗更多的性能。
  2. Alpha Tolerance 透明度容忍度,这个值代表生成多边形时,会忽略掉透明度小于这个值的图片位置。
  3. Subdivision 多边形顶点数量
  4. Weighs 是否自动生成权重

根据需求设置参数,点击Generate For Selected 生成多边形。

image-20220506203926183

这个时候在Preview Pose (预览)页面就可以预览动画的效果了。

Unity_skin2

就是这么个效果,当然其实是要给骨骼设置权重才能预览的,不过我在生成多边形勾选了自动生成权重,所以可以预览。

生成骨骼权重

image-20220506204606917

  1. Auto Weights 自动生成权重
  2. Weight Slider 编辑顶点,边的权重
  3. Weight Brush 权重笔刷,选中骨骼之后可以用笔刷增加权重
  4. Bone Influence 选择骨骼用到的sprite

自动生成骨骼是,如果一个封闭区域只有一个根骨骼,那么区域内所有顶点的权重都是这跟骨骼的,但是一个区域内有多根骨骼的时候,就会根据骨骼的长度和位置来调整权重,大多数时候需要手动调整权重的情况也是这种。

image-20220506205100448

这是自动添加完权重之后的样子,区域的颜色对应着童颜颜色的骨骼的权重,在使用Weight Brush 时也是通过给区域刷上颜色表示权重。

权重可以理解为,当骨骼移动时,区域中的顶点要不要跟着骨骼移动,一般来说拥有骨骼权重的顶点会跟着骨骼移动。

 这里的多边形用于骨骼移动时,对图形的变换,与用于碰撞的不是同一个

骨骼深度

Unity_skin3

像是骨骼在这样移动时,会有部分会有重叠的情况,这个时候需要让开发者决定那一部分显示在上面,这个是由骨骼的深度决定,在窗口的右下角可以看到骨骼的Name属性以外还有Depth属性。

Depth属性决定了骨骼重叠时,哪一根骨骼显示在前面,这个值越大,显示的位置就越靠前,两个骨骼的深度可以是重复的。

拼装

处理好以上这些东西之后,就可以使用资源生成一个sprite,然后添加控件 Sprite Skin 在控件中点击Create Bones 就可以在Scene Window 中看到精灵身上的骨骼了。

image-20220506210235352

移动骨骼可以将精灵拼装起来,如上。

2D IK

这一步不是必须的,只是为了更好的控制骨骼,在拼装好的的精灵上添加Ik链,模拟骨骼运动时的连锁反应,所以不添加IK链也是可以的,只不过需要一根一根的去逐一调整骨骼的位置。

在精灵的Inspector Window 中添加一个 Ik Manager 2D组件,然后在组件里,添加IK Solvers

image-20220507215813033

添加时选择CCD,这应该是IK链涉及到的模拟算法,暂时不太了解。

添加完之后,可以在Hierarchy Window 看到精灵多了一个子对象,这就是Ik链的对象。

image-20220507220024273

  1. Effector 指骨骼对象,选择在Ik链中的起始骨骼,比如要为手臂添加Ik链,那么这里应该设置为手掌位置的骨骼。
  2. Chain Length 链条长度,即这个Ik链在Effector 骨骼之后,需要链接多少条骨骼。

设置好这两个属性之后,点击Create target 创建与精灵的联系。

设置好之后,在Scene Window 中可以看到精灵的手掌(Effector 骨骼)上有一个白色的小圆圈,拖动这个小圆圈就可以调整整个链条的姿态。

Unity_skin4

如果不添加IK链,拖动效果是这样的

Unity_skin6

前面的骨骼移动不会影响后面的,后面的是会影响前面的。

这就是IK链的作用了,如果你希望在手臂移动的时候胸部或者腰部也跟着移动,可以调整IK链的长度,不过长度边长之后可以移动的位置也会收到限制,这个可以根据自己的需要调整。

录制动画

在菜单中点击Window->Animation->Animation调出动画编辑器,选中精灵之后Create 一个新的Animation 文件。

image-20220507221309372

点击录制按钮,然后将右边的代表动画进度条调整到你想录制的帧数,之后再Scene Window中调整精灵的动作,Animation 编辑器会自动将上一个属性平滑的过度到当前调整的动作,然后多次重复这个操作录制动画。

Unity_skin7

你甚至可以让它打一套咏春,如果你足够有耐心。

在编辑骨骼动画时,可以先在网上找到一些动作的分解图

image-20220507221859029

像是这样的,然后一个动作一个动作跟着录制,就可以得到一个不错的跑步的动画了。

大脸猫

这个人虽然很勤快,但什么也没有留下!

文章评论

  • 时光巷陌

    太厉害了

    2022年8月21日
  • 66666

    太牛了学习到了,非常感谢博主

    2022年8月6日
  • 芭比

    看起来挺好玩的

    2022年5月8日
    • 大脸猫

      @芭比 确实好玩,做一些小动画,感觉用这个技术就已经足够了,而且Unity搭建场景也很方便。

      2022年5月8日