如何在 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 导出文件目录

arduino 复制代码
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 文件。

swift 复制代码
_Atlas.asset             与之前的atlas对应的图集描述文件
_Material.mat            与之前的png对应的素材纹理
_SkeletonData.asset      与之前的json对应的骨骼数据文件

创建动画对象

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

  1. 选中 Canvas 后,Render Mode 选择 "Screen Space-Camera",Hierachy 中的 Main Camera 拖入 Render Camera 中。
  1. 在场景中创建空对象(如右键 Hierarchy > Create Empty),命名为 SpineCharacter

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

  3. 配置组件:

  • Skeleton Data Asset :拖入前面 "Spine 数据资源" 生成的_SkeletonData.asset文件。
  • Animation Name :输入默认播放的动画名称(如idle)。
  • Loop:勾选以循环播放。
  • Scale:调整 Rect Transform 的 Scale,大小自行尝试。

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

脚本控制动画

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

csharp 复制代码
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 小游戏。

相关推荐
evamango6 小时前
《Unity Shader入门精要》十六、Unity 中的渲染优化技术
unity3d
北桥苏4 天前
如何在 Unity3D 中实现圆角效果?
unity3d·游戏开发
泉城老铁17 天前
VUE2实现加载Unity3d
前端·vue.js·unity3d
evamango19 天前
《Unity Shader入门精要》十一、让画面动起来
unity3d
Thomas游戏开发19 天前
Unity Android性能优化设置指南
前端框架·unity3d·游戏开发
Thomas游戏开发22 天前
Unity3D C#监听Button点击事件
前端·unity3d·游戏开发
谷宇.25 天前
【Unity3D实例-功能-拔枪】角色拔枪(三)IK的使用-紧握武器
游戏·unity·c#·unity3d·游戏开发·游戏编程·steam
evamango25 天前
《Unity Shader入门精要》十、高级纹理
unity3d
白色牙膏25 天前
从零到搞定:URP Lit彩色箱子材质的开发碎碎念
unity3d
半夜微笑狗1 个月前
数据持久化-PlayerPrefs
unity3d