Spineのjsonの内部の雑まとめ

Spineプロジェクトをエクスポートすると出力されるjsonファイルにはボーン構成やアニメーションデータが含まれています。

これを弄れば動的にSpineのボーン構成やアニメーションを構築することが出来るんじゃない!? とか思ったりしたわけです。

まあ下手の横付きで中身を覗いてみようかかなって思います

ここにjsonファイルをぶち込むとわかりやすい形に成形してくれます。ありがてえなあ!

基本的にはskeletonの下に基本譲歩、boneの下にボーン構成、animationsの下にアニメーション設定が含まれています。

以下、必要になったものをその都度追加していこうと思います。完全に自分用。

ボーン設定

    "bones": [
       {
           "name": "root"
       },
       {
           "name": "hip",
           "parent": "root",
           "length": 40.16,
           "rotation": 90,
           "x": 0.39,
           "y": 182.81,
           "color": "ff0000ff"
       },

//親子関係はparentで管理、長さ、回転、x,y等、親ボーンからの相対値で管理。
//注意するのは、上方向に伸びたボーンは90度の角度がついて上=Xになってる。n

json処理で単純なポイントボーンを生成するのは簡単でも、特定の角度で伸びるボーンを作成するのはちょっと癖がありそうだという印象。

parentボーンからのxyで相対位置。注意したいのは、aftereffectsとyの基準が違うことで、少し混乱する。After Effectsは左上隅が0になり、yが大きくなるほど下にいくが、spineの場合はy値が高いと上へ行く。

アニメーション設定

animations.animation//アニメーション設定「animation」にアクセス
animations.animation.bones.arm //ボーンのarmにアクセス
 "animation2": {
           "bones": {
               "hip_controller": {
                   "translate": [
                       {
                           "y": 0.85,
                           "curve": 0,
                           "c2": 0.19,
                           "c3": 0.14
                       },
                       {
                           "time": 0.6667,
                           "x": -0.85,
                           "y": 33.11,
                           "curve": 0,
                           "c2": 0.86,
                           "c3": 0.685
                       },
                       {
                           "time": 1,
                           "y": 1.7
                       }
                   ]
               },

//hip_controllerの変化量を配列で収録。timeが設定されてなければ最初のフレーム。
//秒数で収録しており、フレーム変化に追従出来るようになっている。
//xとyは設定モードからの相対位置が記録されている。前のキーからの変化量ではないことに注意。

アニメーション設定はさらにややこしいので注意。xyの値はワールド値から見ると「現在のparent位置 - 現在のcurrent位置 - 設定のcurrent位置」となる。設定時の元ボーン位置が関わってくる。

自動構築するときは、下手に親子関係を構築せずにrootを親にして素直に絶対値で全部処理してしまうのが楽だなというのが今のところの感想。

パラーメーターの内部が0個だったりするる場合、エラーが出るようだ。

この記事が気に入ったらサポートをしてみませんか?