SpineデータをUnityで扱う


最近Spineが更に便利になって
jsonで吐き出されたデータをそのまま突っ込めば
Unityですぐ使えるとの情報を見つけた。

別のSpineエントリーを読んでなんとかなりましたが、若干古かったので自分用メモ。

Spineからの吐き出し

まずSpineからデータをExport。
チェックは全部入れる。

フォルダのデータをテキストファイルに

一番上の.atlasファイルを.txtにしてUnityで読めるようにする。


ほい。

UnityにSpineのランタイムを放り込む

https://github.com/EsotericSoftware/spine-runtimes
ここからzipをまるまる落としてきて、中にある

  • spine-unity
  • spine-csharp

フォルダをUnityのProjectへドロップ。

Spineから吐出されたデータをフォルダごとUnityへ

プロジェクトにSpineデータを放り込んだところ。


そうすると自動でスケルトンデータやらが生成される。

Spine SkeltonAnimationオブジェクトを作る

つくったらヒエラルキーを見る。

一番下のSkelton Animation(Script)に
さっきインポート時に生成されたSkeltonデータをアタッチ。


Animationのところに自分の作ったアニメーションリストから選択できるので、
初期設定のアニメーションをここで選択。
これで表示されるはずです。

Scriptでアニメーションを制御

ボタン操作でアニメーションを切り替えるのは以下のQiitaエントリを参考に。

Spineでプロ生ちゃんに動いてもらう

私は今回アニメーションを時間経過などで自動で切り替えたかったので、
一回だけ実行するように真偽値を一個増やして2重で判定をとるようにしました。

using UnityEngine;
using System.Collections;

// 今回はSwingという揺れるアニメーションを操作する。
public class swing : MonoBehaviour {


    SkeletonAnimation swing2d = null;
    Spine.AnimationState swing2dstate = null;

    bool isStart = true;
    bool isSwing = true;

    // Use this for initialization
    void Start () {
        swing2d = GetComponent<SkeletonAnimation>();
        swing2dstate = swing2d.state;
    }

    // Update is called once per frame
    void Update () {


            if(isSwing && iStart) {
                swing2dstate.SetAnimation(0, "swingAnimation", false); 
                // SetAnimation(基本は0, "アニメーションの名前", falseならループ)
                isStart = false;
            }
        }

}

update関数でSetAnimationを実行すると、
ワンフレームごとにアニメーションが0秒まで巻き戻されて再スタートされてガクガクしちゃうので、
一回しか実行されないようなに工夫を施す必要がある。

使い始めたばっかだし、日本語資料もすくないので良いやり方あったら教えて下さい。