返回

image
image
image
image
image

如何在 Unity 使用 Spine 動畫 ?



1. 什麼是Spine?


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

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

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


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

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

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


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

第一步順利安裝成功的話

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


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

你就會看到你的動畫了

0:00 /0:06 1×


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


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 1×