バイナリ出力形式
ここでは、Spineのスケルトンとアニメーションデータのバイナリ出力形式について説明します。Spineランタイムは、このデータをロードしてアニメーションを表示します。また、Spineはこの形式のデータをインポートすることができ、他のツールとの相互運用が可能です。実際にバイナリ形式でエクスポートされたファイルを確認するには、Spineランタイムの各種プロジェクト例をご覧ください。
SpineランタイムはJSONやバイナリデータのロードを行います。独自のランタイムをゼロから書く場合(これは膨大な作業量になります)を除き、独自のロードコードを書く必要はありません。
バイナリ形式はファイルサイズが非常に小さく、ランタイムでの読み込みも非常に高速です。デメリットは、データのロードに影響を与えるようなランタイムの変更があった場合、Spineプロジェクトからそのバイナリデータを再エクスポートする必要があることです。また、バイナリ形式は非可読形式なので、データの検査にはJSON形式の方が適している可能性があります。
「※非必須」とマークされたデータは、エクスポート設定の非必須データ(Nonessential data)
がチェックされている場合のみ出力されます。このデータはレンダリングには必要ありませんが、ツールやSpineにデータをインポートする際に役立つ場合があります。
バイナリ形式は、ボーン、スロット、コンストレイント、スキン、アニメーションのリストを持つ”skeleton data”インスタンスをシリアライズしたものです。これは、画面上の特定のスケルトンインスタンスに結びつかないステートレス(処理状態を把握しない)データです。
データ型
バイナリ形式では、いくつかの基本的なデータ型が使用されます。参考までにC言語でのコード例を示します。
Boolean
boolean
は1バイトで、true
の場合は1を、false
の場合は0を格納します。
Short
short
は16ビットで、2バイトとして格納されます。
return (readByte() << 8) | readByte();
}
Int
int
は32ビットで、4バイトとして格納されます。
return (readByte() << 24) | (readByte() << 16) | (readByte() << 8) | readByte();
}
Varint
varintはint型ですが、値によって1バイトから5バイトで格納されます。varintには2種類あり、varint+
は小さな正の値、varint-
は小さな負の値(および正の値)に対して容量を取らないように最適化されています。
varint の各バイトについて、追加のバイトがある場合は MSB が設定されます。結果が小さな負の値に対して最適化されている場合は、シフトされます。
unsigned char b = readByte();
int value = b & 0x7F;
if (b & 0x80) {
b = readByte();
value |= (b & 0x7F) << 7;
if (b & 0x80) {
b = readByte();
value |= (b & 0x7F) << 14;
if (b & 0x80) {
b = readByte();
value |= (b & 0x7F) << 21;
if (b & 0x80) value |= (readByte() & 0x7F) << 28;
}
}
}
if (!optimizePositive) value = (((unsigned int)value >> 1) ^ -(value & 1));
return value;
}
Float
float
は32ビットで、4バイトとして格納されます。言語やアーキテクチャによっては、バイトを組み合わせてintにし、さらにfloatに変換することも可能です。
union {
int intValue;
float floatValue;
} intToFloat;
intToFloat.intValue = readInt();
return intToFloat.floatValue;
}
String
string
は、varint+lengthに0個以上のUTF-8文字が続くものです。lengthが0の場合、stringはnullです(ほとんどの場合、空と同じと考えることができます)。lengthが1であれば、stringは空です。それ以外の場合は、length の後にlength - 1
バイトの文字列が続きます。UTF-8文字は1バイト以上であることがあるので、UTF-8文字よりもバイト数が多い場合があります。
int count = readVarint(true);
if (count-- > 1) {
if (count >= maxLength) count = maxLength - 1;
for (int i = 0; i < count; i++)
value[i] = readByte();
}
value[count] = '\0';
}
アタッチメント名など、スケルトンデータ全体で共有できる文字列(shared strings)もあります。ファイルサイズを小さくするために、shared stringsはすべてバイナリフォーマットの最初のメタデータセクションの後にリストとして格納されます。
このリストから読み出すべきstringを、以下ではref string
と表記します。ref string
は、shared stringsのリストへのvarint+インデックスです。インデックスが0の場合、stringはnullです(ほとんどの場合、空と同じと考えることができます)。それ以外の場合は、インデックス値を1つ減らして、shared stringsのリストへのインデックスを作成します:
int index = readVarint(true);
return index == 0 ? 0 : sharedStrings[index - 1];
}
Color
color
はRGBA値でint型に格納されます。
int rgba = readInt();
value[0] = ((rgba & 0xff000000) >>> 24) / 255f; // R
value[1] = ((rgba & 0x00ff0000) >>> 16) / 255f; // G
value[2] = ((rgba & 0x0000ff00) >>> 8) / 255f; // B
value[3] = ((rgba & 0x000000ff)) / 255f; // A
}
定数
場所によっては、識別のために定数が使用されます。定数は1バイトです。定数は接頭語をALLCAPS
(全て大文字)で表示します。
ATTACHMENT_BOUNDING_BOX = 1
ATTACHMENT_MESH = 2
ATTACHMENT_LINKED_MESH = 3
ATTACHMENT_PATH = 4
ATTACHMENT_POINT = 5
ATTACHMENT_CLIPPING = 6
BLEND_MODE_NORMAL = 0
BLEND_MODE_ADDITIVE = 1
BLEND_MODE_MULTIPLY = 2
BLEND_MODE_SCREEN = 3
CURVE_LINEAR = 0
CURVE_STEPPED = 1
CURVE_BEZIER = 2
BONE_ROTATE = 0
BONE_TRANSLATE = 1
BONE_SCALE = 2
BONE_SHEAR = 3
TRANSFORM_NORMAL = 0
TRANSFORM_ONLY_TRANSLATION = 1
TRANSFORM_NO_ROTATION_OR_REFLECTION = 2
TRANSFORM_NO_SCALE = 3
TRANSFORM_NO_SCALE_OR_REFLECTION = 4
SLOT_ATTACHMENT = 0
SLOT_COLOR = 1
SLOT_TWO_COLOR = 2
PATH_POSITION = 0
PATH_SPACING = 1
PATH_MIX = 2
PATH_POSITION_FIXED = 0
PATH_POSITION_PERCENT = 1
PATH_SPACING_LENGTH = 0
PATH_SPACING_FIXED = 1
PATH_SPACING_PERCENT = 2
PATH_ROTATE_TANGENT = 0
PATH_ROTATE_CHAIN = 1
PATH_ROTATE_CHAIN_SCALE = 2
フォーマット
データは以下の順番で表示されます:
string
hash: すべてのそのスケルトンデータのハッシュ。これは、ツールで前回ロードしたときからデータが変更されたかどうかを検出するために利用することができます。
string
version: そのデータをエクスポートしたSpineのバージョン。これは、ツールで特定のSpineのバージョンを強制的に使用するために利用することができます。
float
x: Spineで設定したセットアップポーズにおける、スケルトンのアタッチメントのAABB(軸に沿ったバウンディングボックス)の左下のx座標。
float
y: Spineで設定したセットアップポーズにおける、スケルトンのアタッチメントのAABBの左下のy座標。
float
width: Spineで設定したセットアップポーズにおける、スケルトンのアタッチメントのAABB幅。スケルトンのAABBはポーズの取り方によって異なりますが、これはスケルトンの一般的なサイズとして使用できます。
float
height: Spineで設定したセットアップポーズにおける、スケルトンのアタッチメントのAABBの高さ。
boolean
nonessential: false の場合、非必須データは省略されます。
float
fps: Spine内でのドープシートのフレームレート(frames per second)。省略された場合は 30 となります。※非必須
string
images: Spine内でのイメージパス。※非必須
string
audio: Spine内でのオーディオパス。※非必須
varint+
string count: 後に続く共有文字列(shared strings)の数。
各stringごとに:
string
shared string: スケルトン内のデータ間で共有されるstring。すべてのshared stringsのリストに追加されます。
varint+
bone count: 後に続くボーンの数。
各ボーンごとに:
string
name: ボーンの名前。これはスケルトンにおいてユニーク(一意)になります。
varint+
parent index: 親ボーンのインデックスに1を足した値です。rootボーンでは、この値は省略されます。
float
rotation: セットアップポーズにおける、親に対するボーンの回転 (度)。
float
x: セットアップポーズにおける親に対するボーンの X 位置。
float
y: セットアップポーズにおける親に対するボーンの Y 位置。
float
scaleX: セットアップポーズにおけるボーンの X スケール。
float
scaleY: セットアップポーズにおけるボーンの Y スケール。
float
shearX: セットアップポーズにおけるボーンのシアー X。
float
shearY: セットアップポーズにおけるボーンのシアー Y。
float
length: ボーンの長さ。ボーンの長さは、2つのボーンによるIKとボーンのデバッグラインの描画を除いて、実行時にはあまり使用されません。
TRANSFORM_*
transform mode: 親ボーンのトランスフォームをどのように継承するかを決定します。
boolean
skin required: trueの場合、アクティブなスキンがボーンを持っているときのみ、このボーンはアクティブになります。
color
color: Spine内でのボーンのカラー。※非必須
varint+
slot count: 後に続くスロットの数。
各スロットごとに:
string
name: スロットの名前。これはスケルトンにおいてユニーク(一意)になります。
varint+
bone index: このスロットがアタッチされているボーンのインデックス。
color
color: セットアップポーズにおけるスロットのカラー。
dark
color: セットアップポーズにおけるスロットのダークカラー。スロットがティントブラックを使用しない場合は-1になります。
ref string
attachment: セットアップポーズ用のスロットのアタッチメントの名前。null の場合、セットアップポーズではアタッチメントが無いということになります。
BLEND_MODE_*
blend: スロットの表示アタッチメントを描画する際に使用するブレンドのタイプ。
varint+
ik constraint count: 後に続くコンストレイントの数。
各コンストレイントごとに:
string
name: コンストレイントの名前。これはスケルトンにおいてユニーク(一意)になります。
varint+
order index: コンストレイントが適用される順番を表す序数。
boolean
skin required: trueの場合、アクティブなスキンがコンストレイントを持つときのみこのコンストレイントが適用されます。
varint+
bone count: 後に続くボーンの数( 1 または 2 )。各ボーンごとに:
varint+
bone index: コンストレイントによって回転が制御されるボーンのインデックス。
varint+
target index: ターゲットボーンのインデックス。
float
mix: 0 から 1 の値で、コンストレイントがボーンに及ぼす影響を示します。0 は FK のみ、1 は IK のみ、そして中間は FK と IK のミックスを意味します。
float
softness: 2つのボーンによるIKのための値で、回転が遅くなるボーンの最大到達点からの距離を表しています。
byte
bendDirection: 1 の場合、ボーンは正の回転方向に曲がります。-1の場合、ボーンは負の回転方向に曲がります。
boolean
compress: true の場合、単一のボーンのみが制約され、ターゲットが近すぎる場合、ボーンはそれに到達するようにスケーリングされます。
boolean
stretch: trueかつターゲットが範囲外である場合、親ボーンはターゲットに達するようにスケーリングされます。複数のボーンが制約され、親ボーンが非均一なローカルスケールを持つ場合、ストレッチは適用されません。
boolean
uniform: trueの場合、単一のボーンのみが制約され、compress(圧縮) または stretch(ストレッチ) が使用されると、そのボーンはX軸とY軸の両方でスケーリングされます。
varint+
transform constraint count: 後に続くコンストレイントの数。
各コンストレイントごとに:
string
name: コンストレイントの名前。これはスケルトンにおいてユニーク(一意)になります。
varint+
order index: コンストレイントが適用される順番を表す序数。
boolean
skin required: trueの場合、アクティブなスキンがコンストレイントを持つときのみこのコンストレイントが適用されます。
varint+
bone index: コンストレイントによってトランスフォームが制御されるボーンのインデックス。
varint+
target index: ターゲットボーンのインデックス。
boolean
local: trueの場合はターゲットのローカルトランスフォームが影響を受け、そうでない場合はワールドトランスフォームが影響を受けます。
boolean
relative: trueの場合はターゲットのトランスフォームが相対的に調整され、そうでない場合はトランスフォームが絶対的に設定されます。
float
offset rotation: ターゲットボーンからオフセットする回転値。
float
offset x: ターゲットボーンからオフセットするX距離。
float
offset y: ターゲットボーンからオフセットするY距離。
float
offset scale x: ターゲットボーンからオフセットするXスケール。
float
offset scale y: ターゲットボーンからオフセットするYスケール。
float
offset shear y: ターゲットボーンからオフセットするYシアー。
float
rotate mix: 0から1までの値で、コンストレイントがボーンに及ぼす影響を示します。0は影響なし、1は制約のみ、そして間は通常のポーズとコンストレイントのミックスを意味します。
float
translate mix: rotate mixと同様です。
float
scale mix: rotate mixと同様です。
float
shear mix: rotate mixと同様です。
varint+
path constraint count: 後に続くコンストレイントの数。
各コンストレイントごとに:
string
name: コンストレイントの名前。これはスケルトンにおいてユニーク(一意)になります。
varint+
order index: コンストレイントが適用される順番を表す序数。
boolean
skin required: trueの場合、アクティブなスキンがコンストレイントを持つときのみこのコンストレイントが適用されます。
varint+
bone count: 後に続くボーンの数。各ボーンごとに:
varint+
bone index: その回転および/またはトランスレートがコンストレイントによって制御されるボーンのインデックスです。
varint+
target index: ターゲットスロットのインデックス。
PATH_POSITION_*
position mode: パスの位置の計算方法を決定します。
PATH_SPACING_*
spacing mode: ボーン間の間隔をどのように計算するかを決定します。
PATH_ROTATE_*
rotate mode: ボーンの回転をどのように計算するかを決定します。
float
offset rotation: パスの回転からオフセットする回転値を指定します。
float
position: パスの位置。
float
spacing: ボーンとボーンの間の間隔。
float
rotate mix: 0から1までの値で、コンストレイントがボーンに及ぼす影響を示します。0は影響なし、1は制約のみ、そして間は通常のポーズとコンストレイントのミックスを意味します。
float
translate mix: rotate mixと同様です。
Skin default skin: Spineでスキンが割り当てられていないアタッチメントを保持する、デフォルトスキンのアタッチメント。デフォルトスキンは、名前、ボーン、IKコンストレイント、トランスフォームコンストレイント、パスコンストレイントを含まないことに注意してください!
varint+
skin count: 続くスキンの数。
各スキンごとに:
ref string
name: スキンの名前。これはスケルトンにおいてユニーク(一意)になります。
varint+
bones count: そのスキンにおけるのボーンの数。各ボーンごとに:
varint+
bone index: IKコンストレイントのインデックス。
varint+
ik constraint count: スキンのIKコンストレイントの数。各IKコンストレイントごとに:
varint+
ik constraint index: IKコンストレイントのインデックス。
varint+
transform constraint count: スキンのトランスフォーム・コンストレイントの数。各トランスフォームコンストレイントごとに:
varint+
transform constraint index: トランスフォーム・コンストレイントのインデックス。
varint+
path constraint count: スキンのパス・コンストレイントの数。各パスコンストレイントごとに:
varint+
path constraint index: パスコンストレイントのインデックス。Skin skin: スキンアタッチメント。
varint+
event count: 後に続くイベントの数。
各イベントごとに:
ref string
name: イベントの名前。これはスケルトンにおいてユニーク(一意)になります。
varint-
int: イベントのInteger(整数)の値。
float
float: イベントのFloat(浮動小数点)の値。
string
string: イベントのString(文字列)の値。
string
audio: (このイベントがオーディオを再生するためのものである場合)オーディオファイルへのパス。
float
volume: オーディオファイルの再生に使用するボリューム。
float
balance: オーディオファイルの再生に使用するステレオバランス。
varint+
animation count: 後に続くアニメーションの数。
各アニメーションごとに:
varint+
slot count: 後に続くスロットの数。各スロットごとに:
varint+
slot index: スロットのインデックス。
varint+
timeline count: 後に続くタイムラインの数。各タイムラインごとに:
SLOT_*
timeline type: スロットのタイムラインの種類。
varint+
frame count: タイムライン上のキーフレーム数。
SLOT_ATTACHMENT
:各キーフレームごとに:
float
time: キーフレームの時間(秒)。
ref string
attachment name: スロットに設定するアタッチメントの名前、またはスロットのアタッチメントをクリアするためのnull。
SLOT_COLOR
:各キーフレームごとに:
float
time: キーフレームの時間(秒)。
color
color: そのキーフレームでのスロットカラー。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
SLOT_TWO_COLOR
:各キーフレームごとに:
float
time: キーフレームの時間(秒)。
color
light: そのキーフレームでのスロットのライトカラー。
color
dark: そのキーフレームでのスロットのダークカラー。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
varint+
bone count: 後に続くボーンの数。各ボーンごとに:
varint+
bone index: ボーンのインデックス。
varint+
timeline count: 後に続くタイムラインの数。各タイムラインごとに:
BONE_*
timeline type: ボーンのタイムラインの種類。
varint+
frame count: タイムライン上のキーフレーム数。
BONE_ROTATE
:各キーフレームごとに:
float
time: キーフレームの時間(秒)。
float
rotation: そのキーフレームでの回転値。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
BONE_TRANSLATE
、BONE_SCALE
、BONE_SHEAR
:各キーフレームごとに:
float
time: キーフレームの時間(秒)。
float
x: そのキーフレームでのX軸のトランスレート、スケール、またはシアー。
float
y: そのキーフレームでのY軸のトランスレート、スケール、またはシアー。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
varint+
ik constraint timeline count: 後に続くIKコンストレイントのタイムラインの数。各IKコンストレイントのタイムラインごとに:
varint+
ik constraint index: IKコンストレイントのインデックス。
varint+
frame count: タイムライン上のキーフレーム数。各キーフレームごとに:
float
time: キーフレームの時間(秒)。
float
mix: IKコンストレイントのミックス。
byte
bend direction: IKコンストレイントの曲げ方向( 1 または -1 )。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
varint+
transform constraint timeline count: 後に続くトランスフォーム・コンストレイントのタイムラインの数。各トランスフォーム・コンストレイントのタイムラインごとに:
varint+
transform constraint index: トランスフォーム・コンストレイントのインデックス。
varint+
frame count: タイムライン上のキーフレーム数。各キーフレームごとに:
float
time: キーフレームの時間(秒)。
float
rotate mix: トランスフォーム・コンストレイントの回転ミックス。
float
translate mix: トランスフォーム・コンストレイントのトランスレートミックス。
float
scale mix: トランスフォーム・コンストレイントのスケールミックス。
float
shear mix: トランスフォーム・コンストレイントのシアーミックス。
varint+
path constraint entry count: 後に続くパスコンストレイントのエントリ数。各パスコンストレイントのエントリごとに:
varint+
path constraint index: パスコンストレイントのインデックス。
varint+
path constraint timeline count: 後に続くパスコンストレイントのタイムラインの数。各パスコンストレイントのタイムラインごとに:
PATH_*
path constraint timeline type: パスコンストレイントのタイムラインの種類。
varint+
frame count: タイムライン上のキーフレーム数。各キーフレームごとに:
float
time: キーフレームの時間(秒)。
PATH_POSITION
:
float
position: パスコンストレイントの位置。
PATH_SPACING
:
float
spacing: パスコンストレイントの間隔。
PATH_MIX
:
float
rotate mix: パスコンストレイントの回転ミックス値。
float
translate mix: パスコンストレイントのトランスレートミックス値。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
varint+
skin count: 後に続くスキンの数。各スキンごとに:
varint+
skin index: スキンのインデックス。
varint+
slot count: 後に続くスロットの数。各スロットごとに:
varint+
slot index: スロットのインデックス。
varint+
deform timeline count: 後に続く変形のタイムラインの数。各変形のタイムラインごとに:
ref string
name: スキンやスロットにおけるアタッチメントの名前。
varint+
frame count: 変形のタイムラインのキーフレーム数。各キーフレームごとに:
float
time: キーフレームの時間(秒)。
varint+
end vertex: 最後の頂点値のインデックス。0の場合、start vertexと頂点の値は省略されます。
varint+
start vertex: 最初の頂点値のインデックス。開始(含まれる)と終了(含まれない)の間の各頂点値ごとに:
float
value: アタッチメントのセットアップポーズを基準にして、頂点を調整する量。Curve curve: そのキーフレームのカーブ。最後のキーフレームではカーブは省略されます。
varint+
draw order count: 後に続く表示順序のキーフレームの数。表示順序のキーフレームごとに:
float
time: キーフレームの時間(秒)。
varint+
change count: 後に続く表示順序の変更回数。各変更ごとに:
varint+
slot index: 表示順序を変更するためのスロットインデックス。
varint+
amount: 表示順序でスロットを移動させる量。
varint+
event count: 後に続くイベントキーフレームの数。各イベントのキーフレームごとに:
float
time: キーフレームの時間(秒)。
varint+
event index: キーフレームにおけるイベントのインデックス。
varint-
int: そのキーフレームにおけるInteger(整数)の値。
float
float: そのキーフレームにおけるFloat(浮動小数点)の値。
boolean
has string: falseの場合はstringを省略。
string
string: そのキーフレームにおけるString(文字列)の値。
float
volume: オーディオファイルの再生に使用するボリューム。
float
balance: オーディオファイルの再生に使用されるステレオバランス。
スキンフォーマット
varint+
slot count: 後に続くスキンのスロット数。
各スロットごとに:
varint+
slot index: このスキンにおいて、後に続くアタッチメントが属するスロットのインデックス。
varint+
attachment count: スロットに属するアタッチメントの数。各アタッチメントごとに:
ref string
placeholder name: そのアタッチメントが保管されているスキン内での名前。
ref string
name: アタッチメントの名前。nullの場合、placeholder nameを使用します。これはスケルトンにおいてユニーク(一意)です。画像アタッチメントの場合、これはディスクやテクスチャアトラスでテクスチャ領域を検索するためのキーになります。
ATTACHMENT_*
attachment type: アタッチメントの種類。
ATTACHMENT_REGION
:
ref string
path: nullでない場合、テクスチャ領域を検索するためにアタッチメント名の代わりにこの値が使用されます。
float
rotation: スロットのボーンを基準にした画像の回転(度)。
float
x: スロットのボーンに対する画像のX位置。
float
y: スロットのボーンに対する画像のY位置。
float
scaleX: 画像のXスケール。
float
scaleY: 画像のYスケール。
float
width: 画像の幅。
float
height: 画像の高さ。
color
color: アタッチメントのティント用カラー。
ATTACHMENT_BOUNDING_BOX
:
varint+
vertex count: 境界ボックスの頂点の数。Vertices vertices: 境界ボックスの頂点。
color
color: Spine内での境界ボックスのカラー。※非必須
ATTACHMENT_MESH
:
ref string
path: nullでない場合、テクスチャ領域を検索するためにアタッチメント名の代わりにこの値が使用されます。
color
color: アタッチメントのティント用カラー。
varint+
uv count: メッシュのUV数。各UVごとに:
float
x: 頂点のテクスチャ座標X。
float
y: 頂点のテクスチャ座標Y。
varint+
triangle count: 後に続くメッシュの三角形の点の数。各三角形の点ごとに:
short
vertex index: この点の頂点のインデックス。Vertices vertices: メッシュの頂点。
varint+
hull count: ポリゴンのハルを構成する頂点の数。ハルの頂点は常にverticesリストで最初に表示されます。
varint+
edge count: 接続された頂点間のエッジを定義する、後に続くエッジの点の数。※非必須各エッジの点ごとに:
short
vertex index: この点の頂点のインデックス。※非必須
float
width: そのメッシュで使用する画像の幅。※非必須
float
height: そのメッシュで使用する画像の高さ。※非必須
ATTACHMENT_LINKED_MESH
:
ref string
path: nullでない場合、テクスチャ領域を検索するためにアタッチメント名の代わりにこの値が使用されます。
color
color: アタッチメントのティント用カラー。
ref string
skin: ソースメッシュを含むスキンの名前。nullの場合、ソースメッシュはデフォルトのスキンに含まれているということになります。
ref string
parent: ソースメッシュの名前で、常にこのメッシュと同じスロットにあります。ソースメッシュがデフォルトスキンに無い場合、この名前はスキン内の実際のアタッチメントを検索するために使用されます。
boolean
deform: falseの場合、ソースメッシュのデフォームタイムラインはこのメッシュに適用されません。
float
width: そのメッシュで使用する画像の幅。※非必須
float
height: そのメッシュで使用する画像の高さ。※非必須
ATTACHMENT_PATH
:
boolean
closed: 最後の頂点と最初の頂点が繋がっている場合はtrueになります。
boolean
constantSpeed: パスに沿った移動が一定速度で行われる場合はtrueになります。
varint+
vertex count: パスの頂点の数。Vertices vertices: パスの頂点。
vertex count / 3 の長さごとに:
float
length: セットアップポーズでのパスの始点から各カーブの終点までの長さ。
color
color: Spine内でのパスのカラー。※非必須
ATTACHMENT_POINT
:
float
rotation: スロットが属するボーンに対するポイントの回転(度)。
float
x: スロットが属するボーンに対するポイントのX位置。
float
y: スロットが属するボーンに対するポイントのY位置。
color
color: Spine内でのポイントのカラー。※非必須
ATTACHMENT_CLIPPING
:
int
end slot index: クリッピングを停止するスロットのインデックス。
varint+
vertex count: クリッピングポリゴンの頂点の数。Vertices vertices: クリッピングポリゴンの頂点。
color
color: Spine内でのクリッピングアタッチメントのカラー。※非必須
カーブフォーマット
カーブは、キーフレームと次のキーフレームとの間で使用する補間方法を、リニア、ステップ、ベジエカーブのいずれかで定義します。
ベジエカーブは、cx1、cy1、cx2、cy2 の4つの値で制御点を定義しています。X軸は0から1までで、2つのキーフレーム間の時間の割合を表します。Y軸は0から1までで、キーフレームの値の差のパーセントを表します。
CURVE_*
curve type: カーブタイプ。
CURVE_BEZIER
:
float
c1
float
c2
float
c3
float
c4
頂点フォーマット
boolean
weighted: 頂点にウェイトが設定されている場合はtrueとなります。
weightedがtrueの場合:
各頂点ごとに:
float
x: スロットが属するボーンに対する頂点のX位置。
float
y: スロットが属するボーンに対する頂点のY位置。
weightedがfalseの場合:
各頂点ごとに:
float
bone count: 頂点に影響を与えるボーンの数。そのボーンの数だけ:
float
bone index: 頂点に影響を与えるボーンのインデックス。
float
bind position X: ボーンに対する頂点のX位置。
float
bind position Y: ボーンに対する頂点のY位置。
float
weight: そのボーンへのウェイト。