写点什么

如何在 Unity3D 导入 Spine 动画

作者:北桥苏
  • 2025-04-28
    广东
  • 本文字数:1724 字

    阅读完需:约 6 分钟

如何在 Unity3D 导入 Spine 动画

一、前言


《如何在 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对应的骨骼数据文件
复制代码

创建动画对象


因为游戏是 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 小游戏。



用户头像

北桥苏

关注

公众号:ZERO开发 2023-05-08 加入

专注后端实战技术分享,不限于PHP,Python,JavaScript, Java等语言,致力于给猿友们提供有价值,有干货的内容。

评论

发布
暂无评论
如何在 Unity3D 导入 Spine 动画_Unity3D_北桥苏_InfoQ写作社区