1. 什麼是Spine?

Spine 是一個非常強大的動畫製作工具

你可以使用它來進行骨骼綁定, 動畫混合, 製作位移和關鍵幀等等

製作好動畫之後, 可以很方便的導出到其他遊戲引擎之中直接使用

Spine官网: 专注于游戏的2D动画软件
Spine是一款专门为软件和游戏开发设计,量身打造的2D动画软件。动画师,原画师和程序共同为您的游戏赋予生命。


2. 如何匯出製作好的動畫

在 Spine 製作好動畫之後

接著可以匯出到其他的遊戲引擎進行使用

Spine 提供多種匯出的格式

包含 Json, Binary, Gif, Png, 或 Video

如果匯出 Gif 格式的話

可以使用 UniGifmgGif 等開源代碼在 Unity中播放


一般我們可以選擇匯出 Json 或者 Binary 的格式

實際生產環境中建議使用 Binary 的格式

因為它的檔案尺寸更小且載入速度更快

  1. 點擊 Spine Menu>Export... 選擇 Json
  1. 勾選 Texture atlas, 然後點開 Pack Settings
  1. 把 Atlas extension 改成 .atlas txt
  1. 接著設定好輸出的目錄就可以 Export 了

順利的話你會得到下面三個文件:

如果是輸出 Binary 的話, 就把  Extension 設置为 .skel.bytes.


3. 在 Unity 中使用 Spine 動畫

要在 Unity 中使用 Spine 製作好的動畫

第一步: 下載 spine-unity unitypackage

spine-unity 下载

確保你的 Unity 已經安裝好了 Spine Unity Package

更多詳細的安裝方式可以參考這裡

第二步: 把那三個文件直接拖到 Unity 中

第一步順利安裝成功的話

你會看到 Unity 會自動生成額外的3個系統文件

接著把這個新生成的 Skeleton_Data 拖到場景點擊播放

你就會看到你的動畫了

0:00
/0:06

也可以在這裡修改默認的播放動畫


4. 如何使用代碼控制動畫的播放

這裡是一個簡單的控制動畫代碼

重點在於取得 skeletonAnimation 的 AnimationState 之後

呼叫 SetAnimation 這個函數

暫停的話則是呼叫 SetEmptyAnimation

public class SplineAnimationCtl : MonoBehaviour
{
    [SpineAnimation] public string animationName;

    SkeletonAnimation skeletonAnimation;
    public Spine.AnimationState spineAnimationState;

    void Start()
    {
        skeletonAnimation = GetComponent<SkeletonAnimation>();
        spineAnimationState = skeletonAnimation.AnimationState;
    }

    public void PlayAnimation(string animName, bool loop)
    {
        spineAnimationState.SetAnimation(0, animName, loop);
    }

    public void StopAnimation()
    {
        spineAnimationState.SetEmptyAnimation(0, 0.5f);
    }
}

把這個簡單的代碼掛在 Spine 的物件上

然後在場景上掛兩個按鈕呼叫測試

最終效果:

0:00
/0:06