如何利用Spine制作简单的2D骨骼动画(附软件下载)

Posted wkhere

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用Spine制作简单的2D骨骼动画(附软件下载)相关的知识,希望对你有一定的参考价值。

在2D游戏中,我们经常看到各种各样的角色动画。动画能给游戏带来生机和灵气。创作一段美妙的动画,不仅需要强大的软件工具,更需要一套完善的工作流程。

Spine就是一款针对游戏开发的2D骨骼动画编辑工具。Spine 可以提供更高效和简洁 的工作流程,以创建游戏所需的动画。

下载 Spine3.8.75 专业版/中文/破解

为什么选择骨骼动画?

在 Spine 中通过将图片绑定到骨骼上,然后再控制骨骼实现动画。2D 骨骼动画相对于传统的逐帧动画有以下优势:
 
最小的体积: 传统的动画需要提供每一帧图片。而 Spine 动画只保存骨骼的动画数据,它所占用的空间非常小,并能为你的游戏提供独一无二的动画。
美术需求: Spine 动画需要的美术资源更少,能为您节省出更多的人力物力更好地投入到游戏开发中去。
流畅性: Spine 动画使用差值算法计算中间帧,这能让你的动画总是保持流畅的效果。
装备附件: 图片绑定在骨骼上来实现动画。如果你需要可以方便地更换角色的装备满足不同的需求。甚至改变角色的样貌来达到动画重用的效果。
混合: 动画之间可以进行混合。比如一个角色可以开枪射击,同时也可以走、跑、跳或者游泳。
程序动画: 可以通过代码控制骨骼,比如可以实现跟随鼠标的射击,注视敌人,或者上坡时的身体前倾等效果。
 

Spine的工作流程

骨骼

以一个小小动画为例:

这里是一个机器人“小垃圾”,我们在绘画软件中完成对游戏人物的绘制后,将其导入至Spine。

在上文中,我们提到,骨骼动画和传统动画不同的地方是,骨骼动画并非逐帧绘制,而是将图片绑定到骨骼上,然后再控制骨骼实现动画。因此,在人物绘制时,我们不能“一个图层干到底”,要根据人物运动的需求,区分好人物的身体各个结构的图层。

如图,小机器人的身体被分为了不同的部件

在导入素材后,我们就要进行创建骨骼的工作了。通常情况下,父骨骼带动子骨骼运动,即为FK(Forward Kinematics)正向动力学。以手臂的弯曲为例子,小臂的弯曲会带动手掌运动,而不是手掌停留在原地。

如图,小机器人的小臂带动了手掌运动

那么,我们接下来为素材创建骨骼,就要确定父子集关系,进行骨骼集合的排列组合。

如图,小臂是大臂的子级,躯干是大臂的父级。

在完成了全身的骨骼建立后,我们将图片(插槽)指定给骨骼,基础的绑定就完成了。

小机器人的全身骨骼,下方脚部为IK(Inverse Kinematics)即反向动力学的节点,同FK相反,IK用于实现

由下向上的运动(如俯卧撑,就是手掌用力撑起身体,而非身体用力带动手掌

 

网格与权重

权重用于将网格顶点绑定到一个或多个骨骼,调整骨骼时,顶点也会调整,使得网格跟随骨骼自动变形。

小机器人的手臂网格与权重

在完成骨骼与权重的设置后,移动骨骼,软件就会自动计算素材引发的扭曲与变化,从而实现动画。

动画

在动画制作阶段,对骨骼在时间轴上添加关键帧,做出形变和位移等操作,诸多。

在完成动画后,调整曲线(动画各个阶段播放速度)等许多可选项,我们的小机器人走路动画就完成了。相对起骨骼绑定,网格与权重设置,在2D骨骼动画中,具体的动画制作无疑是相对更具有挑战性的过程,在制作过程中需要考虑到的因素也更加的多。

Unity——Spine动画的使用

一、Spine是什么?

Spine是一个收费的跨平台的2D骨骼动画制作工具。
官方地址:http://zh.esotericsoftware.com/

二、Spine导出的Unity资源

Spine导出的资源有3个文件

  • .json 存储骨骼信息
  • .png 使用的图片图集
  • .atlas.txt 图片在图集中的位置信息

当我们把这三个资源导入到已经引入了Spine运行库的Unity工程后会自动为我们生成

  • _Atlas 材质和.atlas.txt文件的引用配置文件
  • _Material 材质文件
  • _SkeletonData json和_Atlas资源的引用配置文件

三、在Unity中使用Spine动画

首先我们需要导入跟Spine动画资源相对应的Spine运行库(官网下载),然后导入使用的Spine动画。
当我们向场景中拖入相关Spine动画时,会出现以下选项。

分别为:

  1. 使用Spine提供的Api控制动画
  2. 在UI中使用动画
  3. 用Unity提供的动画系统控制

    1和3的区别就是,一个使用Spine提供的API控制动画,另一个使用Aimator控制动画。

四、具体参数

SkeletonData骨骼数据文件

SkeletonData JSON:骨骼数据文件

Scale:缩放大小

  • Skeleton Data Modifiers:骨骼数据修改器

Blend Mode Materizls:混合模式材质

  1. Apply Additive Material:是否使用叠加材质
  2. Additive Materials:叠加材质
  3. Multiply Materials:相乘材质
  4. Screen Materials:屏幕材质

Atlas Assets:图集资源

Mix Settings:混合设置

  • Animation State Data:动画状态数据

Default Mix Duration:默认混合持续时间

  • Add Custom Mix:添加自定义混合(可以指定某两个动画之间的持续时间)

Preview:预览

Animations:动画

  1. Setup Pose:设置姿势(还原到默认姿势)
  2. Create Animation Reference Assets:创建动画参考资源

Slots:插槽相关(一个部位有多张图片构成,可以在这预览)

SkeletonMecanim:骨骼机制

  • Controller:关联动画控制器

SkeletonMecanim是SkeletonAnimation的替代品,它不是必须的

Skeleton Animation

SkeletonData Asset:

关联的骨骼动画信息

Initial Skin:

初始蒙皮
美术在制作时可能有几套蒙皮
一般情况下只有一套 不需要修改

Advanced

  • Initial Flip X/Y:初始翻转X和Y

  • Update When Invisible:不可见时是否更新

     			Nothing:不更新
     			Only Animation Status:仅动画状态
     			Only Event Timelines:仅事件
     			Everything Except Mesh:除了网格其它都更新
     			Full Update:更新所有
    
  • Use Single Submesh:使用单个子网格

  • Fix Draw Order:固定提取顺序

  • Immutable Triangles:不变三角形

  • Clear State On Disable:禁用时清楚状态

  • Separator Slot Names:分隔符插槽名称

  • Z Spacing:Z间距

  • Vertex Data:顶点数据

     			PMA Vertex Colors:PMA顶点颜色
     			Tint Black:淡黑色
     			Add Normals:添加法线
     			Solve Tangents:求解切线
    
  • Add Skeleton Utility:添加骨骼公共程序

Debug

  • Show Bone Names:显示骨骼名字

  • Show Paths:显示路径

  • Show Shapes:显示形状

  • Show Constraints:显示约束条件

  • ScaleX/Y:XY的缩放

  • RGBA:颜色

  • Bone:骨骼

     Show Bone Names:显示骨骼名字
    
  • Slots:插槽

  • Constraints:约束条件

  • Draw Order and Separators:提取顺序和分离器相关

  • Events:事件

  • Data Counts:数据数量

     			Bones:骨骼数量
     			Slots:插槽数量
     			Skins:蒙皮数量
     			Events:事件数量
     			IK Constraints:IK约束数量
     			Transform Constraints:位置约束数量
     			Path Constraints:路径约束数量
    

Animation Name:

当前播放的动画名。

Loop:

是否循环。

Time Scale:

时间缩放,值越大动画播放的越快。

Root Motion:

是否添加根运动的脚本,一般情况下不添加。

五、API

//获取组件
private SkeletonAnimation sa;
	#region 便捷特性,方便使用,以免命名出错。
        // 动画特性
    [SpineAnimation]
    public string jumpName;
        // 骨骼特性
    [SpineBone]
    public string boneName;

        // 插槽特性
    [SpineSlot]
    public string slotName;

        // 附件特性
    [SpineAttachment]
    public string attachmentName;
        #endregion

    void Start()
    
        sa = this.GetComponent<SkeletonAnimation>();
        #region 动画播放
        //方法一:直接改变SkeletonAnimation中参数
        sa.loop = true;
        sa.AnimationName = "jump";

        方法二:使用SkeletonAnimation中动画状态改变的函数
        //马上播放
        SetAnimation (int trackIndex默认索引,填0即可, string animationName
        要播放的动画名字, bool loop是否循环)
        sa.AnimationState.SetAnimation(0, jumpName, false);
        //排队播放
        sa.AnimationState.AddAnimation(0, "walk", true, 0);

        #region 转向
        sa.skeleton.ScaleX = -1;
        #endregion

        #region 动画事件
        //动画开始播放
        sa.AnimationState.Start += (t) =>
        
            print( sa.AnimationName +  "动画开始播放");
        ;
        //动画被中断或者清除
        sa.AnimationState.End += (t) =>
        
            print(sa.AnimationName + "动画中断或者清除");
        ;
        //播放完成
        sa.AnimationState.Complete += (t) =>
        
            print(sa.AnimationName + "动画播放完成");
        ;
        //在Spine软件中制作动画时添加的自定义事件
        sa.AnimationState.Event += (t, e) =>
        
            print(sa.AnimationName + "自定义事件");
        ;
        #endregion
        
        #region 获取骨骼、设置插槽附件
        //获取骨骼
        Bone b = sa.skeleton.FindBone(boneName);
        
        sa.skeleton.SetAttachment(slotName, attachmentName);
        #endregion

以上是关于如何利用Spine制作简单的2D骨骼动画(附软件下载)的主要内容,如果未能解决你的问题,请参考以下文章

如何提高cocos2d-x-spine骨骼动画加载速度

如何提高cocos2d-x-spine骨骼动画加载速度

cocos creator基础-spine骨骼动画组件使用

cocos creator spine骨骼动画组件使用

Spine 游戏开发的 2D

unity2D里spine骨骼动画怎么和序列帧特效绑定一起?