谈谈Spine动画在产品中的应用

笔者介绍:姜雪伟IT公司技术合伙人。IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术具体解释》电子工业出版社等。

Spine是一个2D的骨骼动画编辑器, 由于其良好的UI设计及完整的功能而被开发人员追捧。

Spine动画已经广泛的应用在游戏开发或者APP中。做2D开发的,曾经做动画採用的都是採用序列帧播放的,假设动画播放的效果好,须要制作的序列帧图片比較多,图片的数量多会导致包体急剧增大。对于用户体验来说很差,怎样使用好的效果而且能降低包体大小,这时就显示出Spine的优势了。Spine是专门为2D动作做的编辑器,假设须要使用正版的,要购买序列号,编辑器效果例如以下所看到的:



Spine 能将项目中的动画导出为 JSON 或二进制格式文件。它们能在 Spine 执行时库中完美的再现。 Spine 同一时候还能够导出 GIF 动画。 PNG JPG 序列图。还有 AVI QuickTime 的视频文件。

它开发了多款针对不同引擎和语言的库。详情查看例如以下网址:

https://github.com/EsotericSoftware/spine-runtimes

市面上比較火的引擎有Unity3D和Cocos2d-x,Spine都有相应的版本号开发。

Cocos2d-x引擎开发的游戏眼下大部分都是使用Spine工具制作的,它仅仅有三个文件组成:图集png。json文件包括骨骼信息,atlas文件包括spine图集中的各部分图片的位置信息,比方UV坐标,旋转等。

以以下信息分别表示的是图集,json文件信息,atlas信息。




json文件信息:

{"skeleton":{"hash":"y8la0z0sAMdMiq3cqsdvZoRIAiQ","spine":"3.4.02","width":905,"height":1142.45,"images":""},"bones":[{"name":"root"},{"name":"fadai","parent":"root"}],"slots":[{"name":"人物參考1","bone":"root"},{"name":"fadai","bone":"fadai","attachment":"2d_C001_png01"},{"name":"2d_C001发带/2d_C001_dj01","bone":"root"},{"name":"2d_C001发带/2d_C001_dj02","bone":"root"},{"name":"2d_C001发带/2d_C001_dj2","bone":"root"},{"name":"2d_C001发带/2d_C001_dj3","bone":"fadai"},{"name":"2d_C001发带/2d_C001_dj4","bone":"fadai"}],"skins":{"default":{"fadai":{"2d_C001_png01":{"x":76.71,"y":111.84,"width":905,"height":764}}}},"animations":{"animation":{}}}

atlas文件信息:

2d_C001_dj01.png
size: 909,768
format: RGBA8888
filter: Linear,Linear
repeat: none
2d_C001_png01
  rotate: false
  xy: 2, 2
  size: 905, 764
  orig: 905, 764
  offset: 0, 0
  index: -1

这是三个文件大小总计:一百多K。很小,Spine就是解释这个json文件和atlas文件。

我们公司也开了一款人脸识别追踪的产品,使用上述文件的效果例如以下图所看到的:



在相似相机软件中也有同样的应用,比方FaceU软件使用的就是序列帧。导致后期的包体会很大,事实上全然能够通过Spine动画对其进行改进。

笔者在CSDN学院专门做了一款相似刀塔传奇的横版游戏使用的就是Spine动画,课程观看地址:《2D动作手游-Spine骨骼动画


转载于:https://www.cnblogs.com/zhchoutai/p/8408730.html

在Unity循环播放Spine动画的代码可以参考下面的示例代码: ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using Spine.Unity; public class SpineAnimationController : MonoBehaviour { // Spine动画组件 public SkeletonAnimation skeletonAnimation; // Spine动画名称 public string animationName; // 是否循环播放 public bool loop = true; // Start is called before the first frame update void Start() { // 播放Spine动画 skeletonAnimation.AnimationState.SetAnimation(0, animationName, loop); } // Update is called once per frame void Update() { // 如果Spine动画播放结束,则重新播放 if (skeletonAnimation.AnimationState.GetCurrent(0).IsComplete) { skeletonAnimation.AnimationState.SetAnimation(0, animationName, loop); } } } ``` 在上面的示例代码,我们首先定义了一个SkeletonAnimation类型的变量skeletonAnimation,它是Spine动画组件,用于播放Spine动画。我们还定义了一个字符串类型的变量animationName,它是Spine动画的名称。我们还定义了一个布尔类型的变量loop,用于指定是否循环播放Spine动画。 在Start函数,我们调用了skeletonAnimation.AnimationState.SetAnimation函数来播放Spine动画。其,第一个参数0表示Spine动画的TrackIndex,第二个参数animationName表示要播放的Spine动画的名称,第三个参数loop表示是否循环播放Spine动画。 在Update函数,我们检查当前播放的Spine动画是否已经播放完毕,如果已经播放完毕,则重新播放Spine动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值