Untiy中如何使用Spine骨骼动画

前言


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

Spine动画导出


    Spine->导出...( 快捷键  Ctrl+E)

    Spine支持两种数据格式的导出:

        JOSN

            导出相关设置  

            纹理打包器设置

        导出文件相关命名设置

            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";//切换的动画名称


            usingUnityEngine;

            public class TestSpineAni:MonoBehaviour{

                    private SkeletonAnimation m_spineAni;

                    void Start(){

                        m_spine Ani= gameObject.GetComponent<SkeletonAnimation>();

                        PlayAnim("flying");

                    }

                    public void PlayAnim(stringanimName){

                        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(stringanimName){

                sgp.AnimationState.SetAnimation(0, animName,false);

        }

}

    SkeletonRenderer 还没用到,暂不记录。

    Spine.AnimationState 主要需要了解其事件和回调: Spine事件 & AnimationState回调 

效率对比


    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;

需要动态加载这些材质球的话,需要将这些材质球与其他材质球资源一起打包,否则在手机包会出现材质球丢失。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,548评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,497评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,990评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,618评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,618评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,246评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,819评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,725评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,268评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,356评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,488评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,181评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,862评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,331评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,445评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,897评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,500评论 2 359

推荐阅读更多精彩内容