Untiy中如何使用Spine骨骼动画

前言

    我们在Unity研发项目中,美术同学可能会使用Spine来设计制作一些2D骨骼动画,而Unity引擎本身不能直接播放Spine动画,这时需要我们额外的导入Spine动画相关的插件库才能使用。
 
Spine动画导出

  • Spine->导出...( 快捷键  Ctrl+E)
        
  • Spine支持两种数据格式的导出:
    • JOSN
      • 导出相关设置  
      • yangwenjie16
      • 纹理打包器设置
      •  
      • 导出文件相关命名设置
      • xxxxxx.atlas      ->      xxxxxx.atlas.txt(如果纹理打包器设置已修改,导出后该名字已修改为最终格式)
      • xxxxxx.json      ->     xxxxxx.json
      • xxxxxx.png      ->      xxxxxx.png
    • 二进制
      • 导出相关设置 
      • 纹理打包器设置
      • 导出文件相关命名设置
        • xxxxxx.atlas     ->     xxxxxx.atlas.txt (如果纹理打包器设置已修改,导出后该名字已修改为最终格式)
        • xxxxxx.png      ->     xxxxxx.png
        • xxxxxx.skel      ->     xxxxxx.skel.bytes(需要手动修改)
  • 两种数据格式导出设置基本相同,这种主要提一点是关于 图集扩展名,其初始是.atlas,要将其更改为.atlas.txt(如果导出的时候没有修改,则需要手动将对应文件的格式.atlas改为.atlas.txt),否则导入Unity后,不会自动产生相关需要的文件。
 
插件库导入

关于运行库的导入,有两种方式:
1. 从开源库导入
    下载Spine的runtime库: EsotericSoftware/spine-runtimes ,只需要将其中的 spine-csharp 和 spine-unity 两个部分导入到 Unity 中即可。
2. 从官网插件导入
    可以到Spine官网Unity插件的下载地址 spine-unity-download  直接下载最新的插件包,然后直接导入工程中。
 
    针对新手同学建议使用第二种方式,因为第二种方式的插件包内不仅带有插件的核心库,更有一些官方的Demo示例可以参考,可以帮助快速上手使用Spine库内相关的API。当然如果对Spine动画已经使用过,可以直接通过第一种方式将 其中的 spine-csharp 和 spine-unity 两个部分导入到 Unity 中即可 。具体采用哪种方式建议根据自己的实际情况选择。
 
Spine动画导入Unity步骤

本次只介绍二进制数据格式的导入,关于Josn数据格式的大家可以去网上搜索一下哈
导出制作好的Spine动画后会生成3个相关的文件(该图中已将相关文件的后缀修改成导入的格式了):
 
将三个文件导入到 Unity 中,如果导入过程正常,则会生成三个新的文件:_Atlas 、_Material 和 _SkeletinData ,并且在 Console 面板中会打印导入成功的日志:
 
新生成三个文件的作用:
  • _Material资源包含一个着色器引用和.png纹理。
  • _Atlas资源包含一个材质引用和.atlas.txt 。
  • _SkeletonData资源包含一个json引用和_Atlas资源。
 
UGUI中 使用 Spine动画

在 Hierarchy 面板中,右键 Spine->SkeletonGraphic(UnityUI) :
PS:生成的该对象也需要挂在到Canvas节点下,使用和层级管理方式与Image类似。
 
然后将 Spine 资源导入时生成的 _SkeletinData 文件拖到动画 UI 对象的 Skeleton Data Asset 属性中,在Game面板内就可以看到该动画初始的图像:
 
API使用

  • SkeletonAnimation 组件:
ani.timeScale = 3f;                    //播放速度
ani.loop = true;                       //循环播放
ani.AnimationName = "flying";          //切换的动画名称

 

using UnityEngine;
public class TestSpineAni:MonoBehaviour {
    private SkeletonAnimation m_spineAni;
    void Start () {
        m_spineAni= gameObject.GetComponent<SkeletonAnimation>();
        PlayAnim("flying");
    }
    public void PlayAnim(string animName) {
        m_spineAni.state.SetAnimation(0, animName, false);
    }
}

 

  • SkeletonGraphic  组件(用于Unity的UI中):
using UnityEngine;
public class TestSpineAni2: MonoBehaviour {
    private SkeletonGraphic m_spineAni;
    void Start () {
        m_spineAni = gameObject.GetComponent<SkeletonGraphic>();
        PlayAnim("flying");
    }

    public void PlayAnim(string animName) {
        sgp.AnimationState.SetAnimation(0, animName, false);
    }
}

 

 
效率对比

Json和二进制格式对比大家可以参考官网文档的介绍,这里就不一一讲解了。
 
插件自带材质

由于打包的时候资源需要打包成 Assetbundle ,有几个插件自带的材质球需要注意一下的:
  • spine-unity\Modules\SkeletonGraphic\Shaders 中的 SkeletonGraphicDefault.mat 和 SkeletonGraphicTintBlack.mat ;
  • spine-unity\Shaders\Utility 中也有 HiddenPass.mat ;
  • spine-unity\Modules\SlotBlendModes 中有 SkeletonPMAMultiply.mat 和 SkeletonPMAScreen.mat;
需要动态加载这些材质球的话,需要将这些材质球与其他材质球资源一起打包,否则在手机包会出现材质球丢失。
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值