分享发现 如何在 Unity3D 导入 Spine 动画

zero_dev(ZERO开发) · May 12, 2025 · 24 hits

一、前言

《如何在 Unity3D 项目中导入 Spine 动画》,虽然在网上有很多这种文章,直接将问题交给 DeepSeek 也能得到具体的操作流程,但是照着他们提供的方法还是能遇到几个问题,比如:

  1. AI 回答没有提到 Unity 无法识别.altas,要修改动画文件后缀部分;

  2. 导入到游戏场景中,动画总是被 Canvas 的背景图或元素挡住,层级低;

所以针对这几点问题和操作流程,再带上 Spine 的基本操作,我整理成文章,那么,下面先参照一下我的工具版本开始。

二、工具

  • Unity3D 2020.3

  • Spine 3.8.75

  • spine-unity-3.8-2021-11-10

  • 2D 场景游戏

三、Spine 操作

因为练习时,多数动画文件是直接下载的别人制作好的 json 导出文件(非工程)。所以如果要在游戏场景前看效果,可以先导进 Spine 工具中查看一下。

json 导出文件目录

fileName.altas // 图集描述文件
fileName.json  // 骨骼动画数据
fileName.png   // 纹理图集

导入文件

1. 导入数据 > 选择 “JSON 或二进制文件”> 文件选 “json” 格式文件 > 导入

2. 保存更改 > 浏览 > 自定义名称的 “spine” 格式文件

展示纹理

1. 纹理解包器 > 图集文件选择 “.atlas” 格式文件 > 输出文件夹随便指定即可 > 解开

2.Hierarchy > 图片 > 图片文件 > 路径,找到纹理解包后的输出文件夹

其他

通常一个 json 导出文件里可以包含很多个动画,可以看到预览右边的列表,每一个选项就是一个动画,选中可以预览,左边的工程窗的设置可以进入 K 帧窗。

更多的比如骨骼绑定,蒙皮刷权重,K 帧,我后面再出一个单独的文章说明,下面就进入正题到 Unity 的导入了。

四、导入 Unity3D

要在 Unity3D 导入前需要先下载 Spine Unity 运行库,可以网上找 Spine 官方下载页;第二个是前面提到的 Unity 不识别.atlas 文件,将动画放到 Unity 项目的资源文件夹下需要将.atlas 改成.txt 后缀的文件。

Spine Unity 运行库安装

在 Unity 中,点击菜单栏 Assets > Import Package > Custom Package,选择下载的.unitypackage文件,导入全部内容。

最后在工具栏的 GameObject 下,查看是否有 Spine 选项,就可以验证安装成功与否。

Spine 数据资源生成

前面提到的 Spine 动画的三个文件,再放入游戏资产文件夹中修改了图片描述文件格式后,打开项目后,Unity 会自动生成一个.meta 和两个.asset 文件。

_Atlas.asset             与之前的atlas对应的图集描述文件
_Material.mat            与之前的png对应的素材纹理
_SkeletonData.asset      与之前的json对应的骨骼数据文件</pre>

创建动画对象

因为游戏是 2D 的,我主体场景用的是 Canvas,开头也提到过的导入后总是显示在 Canvas 背景图的下层,所以第一步就从设置画面开始。

1. 选中 Canvas 后,Render Mode 选择 “Screen Space-Camera”,Hierachy 中的 Main Camera 拖入 Render Camera 中。

2. 在场景中创建空对象(如右键 Hierarchy > Create Empty),命名为 SpineCharacter

3. 添加组件:点击 Add Component,搜索并添加 Skeleton Animation

4. 配置组件:

  • Skeleton Data Asset:拖入前面 “Spine 数据资源” 生成的_SkeletonData.asset文件。

  • Animation Name:输入默认播放的动画名称(如idle)。

  • Loop:勾选以循环播放。

  • Scale:调整 Rect Transform 的 Scale,大小自行尝试。

5.Shader 设置 UI/Default,默认的 Spine Skeleton 素材拼接得有点锯齿,详细的可以自行选择尝试。

脚本控制动画

创建 C# 脚本(如SpineController.cs)并附加到角色对象

using Spine.Unity;
public class SpineController : MonoBehaviour {
 public SkeletonAnimation skeletonAnim;
 public string runAnimation = "run";

 void  Start() {
 skeletonAnim.AnimationState.SetAnimation(0, runAnimation, true);
 }

 // 切换动画
 public  void  PlayAnimation(string  animName) {
 skeletonAnim.AnimationState.SetAnimation(0, animName, true);
 }
}

写在后面

为什么我做小游戏从 CocosCreator 切到了 Unity3D,原因是这次尝试的是抖音直播小玩法,也就是弹幕小游戏。

前期为了跑通流程,所以我要避开所有要用到服务端的产品开发,从而采用指令直推方式,但官网只有 Unity SDK 的案例,最后有了这篇文章,当然后续还有更多。

当然 CocosCreator 制作普通单机小游戏我也会继续,不过当前以 2D 为主,毕竟现在用 AI 抽卡来生成游戏资产太方便了,等图生 3D 模型较完善的时候,以后再用 AI 制作 3D 小游戏。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.