最近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エントリを参考に。
私は今回アニメーションを時間経過などで自動で切り替えたかったので、
一回だけ実行するように真偽値を一個増やして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秒まで巻き戻されて再スタートされてガクガクしちゃうので、
一回しか実行されないようなに工夫を施す必要がある。
使い始めたばっかだし、日本語資料もすくないので良いやり方あったら教えて下さい。