如何在 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 小游戏。

相关推荐
Thomas游戏开发3 天前
Unity3D状态管理器实现指南
前端框架·unity3d·游戏开发
土豆宝8 天前
Unity Visual Scripting(可视化脚本) 自定义节点 踩坑教程
unity3d
Thomas游戏开发9 天前
Unity3D光照层级与动态切换指南
前端框架·unity3d·游戏开发
Thomas游戏开发20 天前
Unity3D 崩溃分析工具的集成与优化
前端框架·unity3d·游戏开发
Thomas游戏开发24 天前
Unity3D网格简化与LOD技术详解
前端框架·unity3d·游戏开发
Thomas_YXQ25 天前
Unity3D 图形渲染(Graphics & Rendering)详解
开发语言·unity·图形渲染·unity3d·shader
Thomas游戏开发1 个月前
Unity3D 图形渲染(Graphics & Rendering)详解
前端·unity3d·游戏开发
Thomas游戏开发1 个月前
Unity3D 光栅化 vs 光线追踪:技术详解
前端框架·unity3d·游戏开发
Thomas游戏开发1 个月前
Unity3D 多线程与协程优化详解
前端框架·unity3d·游戏开发