在 Unity 中,常常使用 Spine 来制作一些动画,引擎本身并不能直接播放 Spine 动画,需要额外导入一个 RunTime 插件库才能支持。
运行库导入
到 Spine 官网关于 Unity 插件的下载地址spine-unity-download 直接下载最新的插件包,例如:Spine-Unity 3.6 runtime unitypackage ,然后直接导入工程中。
这种方式是比较常用而且方便的,因为在导入插件核心库的同时,还是导入一些 demo 例子,帮助我们快速上手使用插件的 API ,因此这里我也选择使用第二种方式导入插件。建议新建一个空工程来导入相关 demo 了解插件的使用,而正式工程只导入 spine-csharp 和 spine-unity 两个部分即可。
插件导入步骤
-
在 Unity 菜单中依次点击:Assets->Improt Package->Custom Package
-
选中 Spine-Unity 3.6 runtime unitypackage 并导入,去掉 Spine Examples 的勾选(假如需要查看 demo 则点击 All )
点击 Import 完成导入,导入完成后在工程 Assets 下会多出一个 Spine 目录,表示导入成功。
Spine 资源导入步骤
通常制作好的 Spine 动画导出时会有三个文件: .png 、.json 和 .atlas :
-
在导入 Unity 之前需要将 .atlas 后缀的文件改为 .atlas.txt 后缀(不修改可能会有问题);
-
将三个文件拖到 Unity 的 Project 面板中,假如运行库导入正常,此时会生成三个新的文件:_Atlas 、_Material 和 _SkeletinData ,并且在 Console 面板中会打印导入成功的日志:
三个文件的作用: -
_Material资源包含一个着色器引用和.png纹理。
-
_Atlas资源包含一个材质引用和.atlas.txt 。
-
_SkeletonData资源包含一个json引用和_Atlas资源。
在 UGUI 中使用 Spine
在 Hierarchy 面板中,右键 Spine->SkeletonGraphic(UnityUI) :
然后将 Spine 资源导入时生成的 _SkeletinData 文件拖到动画 UI 对象的 Skeleton Data Asset 属性中,且可以编辑相应的动画控制属性:
勾选 Starting Loop 然后运行场景即可看到当前 Starting Animation 所选中动画的效果,并能动态切换其他动画。
程序控制
很多时候,动画需要通过程序控制实现动态创建、切换和销毁,主要会用到几个组件:SkeletonAnimation 、SkeletonGraphic 和 SkeletonRenderer :
SkeletonAnimation 动画基本控制组件:
skeletonAnimation.timeScale = 1.5f;
skeletonAnimation.loop = true;
skeletonAnimation.AnimationName = "run";
这里用于设置动画的播放速度,是否循环,还有切换动画,如下脚本,将其挂在带 SkeletonAnimation 或继承自 SkeletonAnimation 的组件的物体上,用于播放一次动画:
using UnityEngine;
public class TestSpineAnimCtl : MonoBehaviour {
public SkeletonAnimation sa;
// Use this for initialization
void Start () {
sa = sa ?? gameObject.GetComponent<SkeletonAnimation>();
PlayAnim("run2"</