记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]

1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-unity

         使用git下载,或直接下载master.zip文件,资源下载看下面的优化部分。

2:准备好Spine导出好的动画文件,正好最近偶尔玩一个游戏,里面使用了Spine制作的骨骼动画,我就直接使用它做好的资源记录一下步骤,仅作笔记使用.

     我这里的动画文件资源如图:

        

         这里需要提前做一个准备工作,把上图中的enemy_hunter.atlas文件重名为enemy_hunter.atlas.txt,因为unity无法识别.atlas文件,后面无法进行资源导入.

  3:现在准备工作ok了,我们可以创建一个unity工程了.

         a:把master.zip文件中spine-runtimes-master\spine-unity\Assets\spine-unity文件夹复制到工程的Assets文件夹中

     b:把master.zip文件中spine-runtimes-master\spine-csharp\src文件夹中所有内容复制到工程的Assets\spine-csharp文件夹中

  4:导入资源

   a:这里我在资源面板右键新建一个文件夹,用来存放导入的资源,建议导入顺序为".png" ".json"  ".atlas.txt",这样在最后导入".atlas.txt"文件的时候,会自动生成enemy_hunter_Material.mat文件和enemy_hunter_Atlas.asset文件.

     b:右键新建"spine skeletonData"类型文件,名称为"enemy_hunter_SkeletonData.asset",这里结合网上的资料,感觉以前的版本,应该都是自动生成的,不知道这里为什么需要手动建立这个文件,之前的版本也没有使用过,纯属猜测.文件新建好后,需要配置Skeleton JSON属性,指定"enemy_hunter.json"文件,然后点击"Attempt Reimport"的按钮即可.完成后如图:

    

     到目前为止,骨骼动画的导入工作就完成了.

  5.现在我们把这个骨骼动画加入到场景中看看效果.

     新建Spine SkeletonAnimation对象,Skeleton Data Asset属性指定为"enemy_hunter_SkeletonData.asset"文件.然后Advanced中Animation属性选择一个动作,Loop属性勾上,即可循环播放.

   如图:

   

   

  6:现在即可在Game面板播放观看效果.至此Spine骨骼动画导入unity已完成!






Spine动画缓存优化

背景

Spine是一种骨骼动画工具,我们游戏中的人物、光效等动画资源,基本上都是用它做的。

Spine官方主页:http://zh.esotericsoftware.com/

Spine做出来的动画最终会导出三个文件,分别为:.atlas,.json,.png。

atlas文件和png文件记录合图前的所有被切割的图片信息,而json文件记录的是骨骼配置和动画信息,也就是Spine动画最关键的数据。

为了能让导出的文件在不同的引擎中运行,需要针对不同的引擎写对应的播放代码。这些代码在https://github.com/EsotericSoftware/spine-runtimes中可以找到。

我们的游戏引擎是cocos2dx,里面已经集成了一个Spine动画的播放代码。不一定是最新的,有必要时可以到上面的gitbug中去下载最新的。

问题

背景已经讲完,看看在游戏中使用Spine时遇到什么问题。

问题1、加载多个Spine动画时会比较卡。

原因:加载Spine动画时,需要加载上面提到的三个文件,并且读取json文件里面的动画信息,转换成内存对象,整个过程是阻塞的。当加载多个Spine文件后,造成阻塞的时间比较长,所以就会有卡顿出现了。

问题2、同样的Spine动画加载多个,内存上升明显。

原因:Spine动画数据没有重用,同一个动画加载多个到场景中时,会加载多次,数据也成倍增加。既浪费内存又增加加载卡顿的时间。

针对第一个问题,有一种解决方案,就是避免同一个时间加载过多的Spine动画,可以采用每一段时间加载一个,这样可以分摊加载压力,不至于瞬间卡死程序。这种方法可以缓解,但没有根除。

但不能解决第二个问题。所以得想一种能解决这两种问题的方案。

解决方案

针对问题1,可以采用异步加载的方式,也就是加载过程不要阻塞主线程(渲染线程),开一个线程来加载,加载完成后把数据给主线程,让其渲染。这样可以避免卡顿。

针对问题2,需要一个池子保存加载过的动画数据,当遇到重复的Spine动画时,直接把上次加载的数据返回即可,这样既避免了内存暴涨,又避免了多余的加载过程。

实现

新建SpineCache类,专门用来开线程加载数据和缓存数据。具体实现可以直接到VS里面去看了。纯代码的东西还真不知道怎么描述。。。

注意事项

1、记得手动清除SpineCache里面缓存的数据,我们目前是在切换场景时调用clearAllCache接口。当然特殊时候也可以手动移除指定的缓存。

2、Spine运行时代码的更新,这个比较蛋疼,如果更新了Spine 的运行时代码,需要把修改的SpineCache代码功能加进去。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值