TOP > RPGツクールMV/MZ > PictureSpine.js
プラグインやスクリプトに関するお問い合わせは[maconetto_labo@twitter.com]まで。
PictureSpine.js
本プラグインはSpineを表示、制御する機能を提供します。
SpineとはEsoteric Software社のゲーム用2Dアニメーションです。
[ Spine (c)Esoteric Software ]

説明文に登場するトラック、ミックス、アルファ、タイムスケールなどの用語については
[ Spineユーザーガイド ] をご参照ください。(Spineユーザーガイド > ビュー > プレビュー)
タイムスケールは「スピード」を参照してください。
Spineユーザーガイドではアルファとタイムスケール(スピード)の設定値は0~100となっていますが
本プラグインでは0~1.0で設定します。ご注意ください。(1.0=100%)
動作条件
RPGツクールMV Ver.1.6.2以降
RPGツクールMZ Ver.1.0.0以降
Spine 3.8
※RPGツクールMZでSpine 4.0/4.1を使用したい方は [maconetto_labo@twitter.com] までお問い合わせください。
※RPGツクールMVではSpine 4.xはご利用いだけません。
※Spine 4.2以降はRPGツクールMZでもご利用いただけません。
仕様/制限事項  [ 重要!! ]
デプロイメント時に「未使用ファイルを含まない」を有効にすると、[img/spines]フォルダは
出力対象外となります。デプロイメント後に手動でコピーしてください。
デプロイメント時に画像ファイル暗号化を有効にすると画像ファイルが読み込めなくなります
暗号化していない画像ファイルをデプロイメント後に手動でコピーするか、
下記プラグインの導入をご検討ください。
[ イメージソース復号プラグイン ]
環境準備
i) 以下の場所から[pixi-spine.js]を取得
 [MV] https://github.com/pixijs/spine/tree/pixi4-spine3.8/dist
 [MZ] https://github.com/pixijs/spine/tree/pixi5/dist
 [取得手順]
 - [pixi-spine.js]をクリック
 - [Raw]をクリック
 - 表示された[pixi-spine.js]ファイルを保存

ii) [pixi-spine.js]を[js/libs]フォルダに配置

iii) [img]フォルダに[spines]フォルダを作成
データ準備
i) SpineデータをJSON形式(atlasファイル付き)でエクスポート
 エクスポートの詳細については [ Spineユーザーガイド ] をご参照ください。
 (Spineユーザーガイド > エクスポート)

ii) エクスポートしたファイル(json/atlas/png)を[img/spines]フォルダに置く
 spinesフォルダの中にサブフォルダを作り、その中に置いてもOK。
 jsonファイルとatlasファイルは同じ名前であること。
 pngファイルはatlasファイルに記述されている名前であること。
プラグイン設定
[ json file ]
 使用するSpineファイルを指定します。
 下記の例を参考にしてjsonファイルの場所を指定してください。
 [ img/spines/spineboy.json を使用する場合 ]
  spineboy
 [ img/spines/spineboy/spineboy.json を使用する場合 ]
  spineboy/spineboy
[ disable auto loading ]
 ゲーム起動時のSpine自動読み込みを無効にする場合、ON(true)を指定してください。
 デフォルトではOFF(false)となっており、起動時にすべてのSpineファイルの読み込みを
 開始しゲーム実行の裏で並行して読み込みを行います。
 ON(true)にするとゲーム起動時にSpineの読み込みを開始しません。
 読み込みはsetSkeletonコマンドにより初めて表示されるときに行われます。Spineによっては
 読み込みに時間がかかり、表示までにラグが発生する可能性があります。
 以下のスクリプトを実行することで事前にSpineを読み込むこともできます。
  Game_Spine.loadSkeleton(<name>);
  <name>  
スケルトン名
 指定するスケルトン名の詳細についてはsetSkeletonコマンドの説明をご参照ください。
基本的な使い方
本プラグインにプラグインコマンドはありません
説明文に記載されているコマンドはすべてスクリプトとなります。

i) [ピクチャの表示]でSpineを紐づけるピクチャを表示する
 画像はなくてもOK。

ii) ピクチャにSpineを紐づける
 [ ピクチャ5番に'spineboy'を紐づける場合 ]
  $gameScreen.spine(5).setSkeleton('spineboy');

iii) スキンを設定する
 [ ピクチャ5番のSpineに'clothes'という名前のスキンを設定する場合 ]
  $gameScreen.spine(5).setSkin('clothes');

iv) アニメーションを表示する
 [ ピクチャ5番のSpineに'walk'という名前のアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, 'walk');
 [ ピクチャ5番のSpineに'walk'->'run'->'jump'の順でアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump']);
コマンドをまとめて記述する
以下のように記述することでコマンドを短縮することができます。

$gameScreen.spine(5).setSkeleton('spineboy')
.setSkin('clothes')
.setAnimation(0, 'walk');
変数参照の制御文字を使う
文字列の中では制御文字「\\v[n]」「\\V[n]」を使用することができます。
これらの制御文字を記述した箇所はツクールの変数n番の値に置き換わります。

[ 変数5番の値をアニメーション名として指定する場合 ]
 $gameScreen.spine(5).setAnimation(0, '\\v[5]');
[ 変数10番の値をアニメーションの再生速度として指定する場合 ]
 $gameScreen.spine(5).setAnimation(0, 'walk/timeScale=\\v[10]');
\v[n]」「\V[n]」ではなく「\\v[n]」「\\V[n]」である点に注意。
ここで言う文字列とは主にシングル/ダブルクォーテーションで挟まれたものを指します。
setSkeleton
ピクチャにSpineを紐づけます。

setSkeleton(<name>)
<name>  
スケルトン名

[ ピクチャ5番に'spineboy'を紐づける場合 ]
 $gameScreen.spine(5).setSkeleton('spineboy');
ここで言うスケルトン名は、プラグイン設定で設定したSpineファイルのファイル名になります。
Spineファイル:img/spines/spineboy/spineboy.json -> スケルトン名:'spineboy'
複数のフォルダに同じファイル名のスケルトンが存在する場合は、
フォルダ名をつけて指定することで区別することができます。
Spineファイル:img/spines/spineboyA/spineboy.json -> スケルトン名:'spineboyA/spineboy'
Spineファイル:img/spines/spineboyB/spineboy.json -> スケルトン名:'spineboyB/spineboy'
setSkin
Spineにスキンを設定します。

setSkin(<name>)
setSkin(<name1>, <name2>, ...)
<name>  
スキン名

[ ピクチャ5番のSpineに'clothes'という名前のスキンを設定する場合 ]
 $gameScreen.spine(5).setSkin('clothes');
[ ピクチャ5番のSpineに'clothes'、'hat'という名前の2つのスキンを設定する場合 ]
 $gameScreen.spine(5).setSkin('clothes', 'hat');
複数のスキンを指定するときはカンマ区切りでいくつでも指定できます。
上記例では2つ指定していますが、3つ以上も可能です。
フォルダ下のスキンも指定できます(フォルダ名は書かなくてもOK)。
複数のフォルダに同名のスキンがある場合はフォルダ名をつけて指定してください。
$gameScreen.spine(5).setSkin('folder1/clothes');
$gameScreen.spine(5).setSkin('folder2/clothes');
setAnimation
Spineにアニメーションを設定します。

setAnimation(<tack>, <animation>[, <continuance>, <interrupt>])
setAnimation(<tack>, <animations>[, <order>, <continuance>, <interrupt>])
<track>
トラック番号
<animation(s)>  
アニメーション名/アニメーション名リスト
<order>
順序オプション
<continuance>
継続オプション
<interrupt>
割り込みフラグ
order、continuance、interruptは省略可能。
ただし省略しなかった場合はそれより前の引数も省略せず指定する必要があります。

a) トラック番号
 アニメーションを表示するトラックの番号を指定します。

 [ ピクチャ5番のSpineのトラック1番にアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(1, 'walk');
b) アニメーション名/アニメーション名リスト
 Spineに登録されているアニメーション名を指定します。
 複数のアニメーションを指定する場合は[]で括って記述します。

 [ ピクチャ5番のSpineに'walk'という名前のアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, 'walk');
 [ ピクチャ5番のSpineに'walk'->'run'->'jump'の順でアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump']);
 
フォルダ下のアニメーションも指定できます(フォルダ名は書かなくてもOK)。
複数のフォルダに同名のアニメーションがある場合はフォルダ名をつけて指定してください。
$gameScreen.spine(5).setAnimation(0, 'folder1/walk');
$gameScreen.spine(5).setAnimation(0, 'folder2/walk');
c) 順序オプション
 複数アニメーション指定時の表示順序を指定します。
 sequential  
指定した順番で表示
 random
指定したアニメーションのいずれかを1つ表示
 shuffle
指定したアニメーションの順番を入れ替えて表示
 
省略した場合は'sequential'を指定したものとします。


 [ 'walk'->'run'->'jump'の順でアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump'], 'sequential');
 [ 'walk'->'run'->'jump'のうちいずれか1つを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump'], 'random');
 [ 'walk'、run'、'jump'の順番を入れ替えて表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump'], 'shuffle');
d) 継続オプション
 指定したアニメーションの表示が終わったあとの動作を指定します。
 continue  
最後のアニメーションを繰り返し表示
 reset
最初に戻ってアニメーションを表示
 none
最後のアニメーションが終わった状態で停止
 
省略した場合は'continue'を指定したものとします。


 [ 'walk'->'run'->'jump'と表示したあと'jump'を繰り返し表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump'], 'sequential', 'continue');
 [ 'walk'->'run'->'jump'と表示したあと'walk'からもう一度表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump'], 'sequential', 'reset');
 [ 'walk'->'run'->'jump'と表示したあと'jump'の終わりの状態で停止させる場合 ]
  $gameScreen.spine(5).setAnimation(0, ['walk', 'run', 'jump'], 'sequential', 'none');
 
順序オプションに'random'を指定し、継続オプションに'reset'を指定した場合、
アニメーションを表示するたびにランダムで選択しなおします。
 
順序オプションに'shuffle'を指定し、継続オプションに'reset'を指定した場合、
1サイクルごとに順番を入れ替えなおしてアニメーションを表示します。

e) 割り込みフラグ
 Spineが現在表示しているアニメーションの終了を待つか、中断させて表示するかを指定します。
 true
表示中のアニメーションを中断して指定したアニメーションを表示
 false  
表示中のアニメーションの終了を待ってから指定したアニメーションを表示
 
省略した場合は'false'を指定したものとします。


 [ 表示中のアニメーションを中断して指定したアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, 'walk', 'continue', true);
 [ 表示中のアニメーションの終了を待ってから指定したアニメーションを表示させる場合 ]
  $gameScreen.spine(5).setAnimation(0, 'walk', 'continue', false);
f) アニメーションオプション
 アニメーション名を指定する際、アニメーションごとに以下のオプションを指定できます。
 オプションは「アニメーション名/オプション名=値」の形で記述します。
 1つのアニメーションに複数のオプションを指定する場合はカンマ区切りで記述します。
 times
表示回数(1以上)
 timeScale  
タイムスケール(0以上。1.0で等倍速)
 alpha
アルファ値(0~1.0。1.0で100%)

 [ 'walk'を2回、'run'を3回、'jump'を1回の順で表示させる場合 ]
  $gameScreen.spine(5).setAnimation(1, ['walk/times=2', 'run/times=3', 'jump']);
 [ 'walk'を2倍速、'run'を1.5倍速で表示させる場合 ]
  $gameScreen.spine(5).setAnimation(1, ['walk/timeScale=2', 'run/timeScale=1.5', 'jump']);
 [ 'walk'のアルファ値を0.3、'run'のアルファ値を0.25で表示させる場合 ]
  $gameScreen.spine(5).setAnimation(1, ['walk/alpha=0.3', 'run/alpha=0.25', 'jump']);
 [ 表示回数、タイムスケール、アルファ値をまとめて指定する場合 ]
  $gameScreen.spine(5).setAnimation(1, 'walk/times=2,timeScale=2.5,alpha=0.5');
 
順序オプションで'randam'を指定した場合、表示回数のぶんだけ選択率が高くなります。
setTimeScale
Spine全体のタイムスケールを設定します。

setTimeScale(<value>)
<value>  
タイムスケール(0以上。1.0で等倍速)

[ ピクチャ5番のSpineのタイムスケールを0.3に設定する場合 ]
 $gameScreen.spine(5).setTimeScale(0.3);
アニメーションに個別のタイムスケールを設定していた場合、そのタイムスケールに
このコマンドで設定したタイムスケールを掛けた結果がアニメーションのタイムスケールとなります。
setAlpha
このコマンドは動作未保証です。
アニメーションの組み合わせによっては正しく動作しない可能性があります。
トラックごとのアルファ値を設定します。

setAlpha(<track>, <value>)
setAlpha(<track>, <value>, <overwrite>)
<track>
トラック番号
<value>
アルファ値(0~1.0。1.0で100%)
<overwrite>  
上書きフラグ(true/false)

[ ピクチャ5番のSpineのトラック1番のアルファ値を0.3に設定する場合 ]
 $gameScreen.spine(5).setAlpha(1, 0.3);
[ ピクチャ5番のSpineのトラック2番のアルファ値を0.5に設定する場合(上書き) ]
 $gameScreen.spine(5).setAlpha(2, 0.5, true);
overwriteを省略または'false'を指定した場合は、アニメーションごとに設定されているアルファ値に
このコマンドで設定したアルファ値を掛けた結果が最終的なアルファ値になります。
overwriteに'true'を指定した場合はアニメーションごとのアルファ値は無視され、
このコマンドで設定したアルファ値がそのまま最終的なアルファ値になります。
setMix
アニメーション間のミックス値を設定します。

setMix(<duration>)
setMix(<animation1>, <animation2>, <duration>)
<animation1>
切り替え前アニメーション名
<animation2>  
切り替え後アニメーション名
<duration>
ミックス値(0以上。単位:秒)

[ ピクチャ5番のSpineのミックス値を0.3秒に設定する場合 ]
 $gameScreen.spine(5).setMix(0.3);
[ ピクチャ5番のSpineの'idle'->'walk'に切り替わるときのミックス値を0.5秒に設定する場合 ]
 $gameScreen.spine(5).setMix('idle', 'walk', 0.5);
ミックス値のみ指定した場合は、個別に設定したものを除く
すべてのアニメーション間のミックス値がこの値になります。
setColor
パーツごと、またはパーツ全体の色の割合を設定します。

setColor(<red>, <green>, <blue>, <alpha>)
setColor(<image>, <red>, <green>, <blue>, <alpha>)
<image>  
色を設定するパーツ画像名
<red>
赤率(0~1.0)
<green>
緑率(0~1.0)
<blue>
青率(0~1.0)
<alpha>
不透明率(0~1.0)

[ ピクチャ5番のSpine全体の色を赤に設定する場合 ]
 $gameScreen.spine(5).setColor(1, 0, 0, 1);
[ ピクチャ5番のSpineの'hand'の色を青で半透明に設定する場合 ]
 $gameScreen.spine(5).setColor('gun', 0, 0, 1, 0.5);
setColorは色そのものを設定するのではなく「元の色に指定値を掛ける」コマンドです。
例えばsetColor(1, 0, 0, 1)は元の色の赤成分は100%残し、青成分と緑成分を0にします。
setMosaic
パーツごと、またはパーツ全体にモザイクを設定します。

setMosaic(<size>)
setMosaic(<image>, <size>)
<image>  
モザイクを設定するパーツ画像名
<size>
モザイクのサイズ(1以上。単位:px)

[ ピクチャ5番のSpine全体に10pxサイズのモザイクを設定する場合 ]
 $gameScreen.spine(5).setMosaic(10);
[ ピクチャ5番のSpineの'hand'というパーツに15pxサイズのモザイクを設定する場合 ]
 $gameScreen.spine(5).setMosaic('hand', 15);
setOffset
ピクチャ座標を基点とした相対座標を設定します。

setOffset(<x>, <y>)
<x>  
X座標(単位:px)
<y>
Y座標(単位:px)

[ ピクチャ5番のSpine座標をピクチャのX座標+8pxに設定する場合 ]
 $gameScreen.spine(5).setOffset(8, 0);
[ ピクチャ5番のSpine座標をピクチャのY座標-8pxに設定する場合 ]
 $gameScreen.spine(5).setOffset(0, -8);
setScale
拡大率を設定します。

setScale(<x>, <y>)
<x>  
横方向の拡大率(1.0で等倍)
<y>
縦方向の拡大率(1.0で等倍)

[ ピクチャ5番のSpineを横方向に2.5倍に拡大する場合 ]
 $gameScreen.spine(5).setScale(2.5, 0);
[ ピクチャ5番のSpineを縦方向に反転する場合 ]
 $gameScreen.spine(5).setScale(0, -1.0);
setVisible
表示/非表示を設定します。

setVisible(<visible>)
<visible>  
表示フラグ(true:表示/false:非表示)

[ ピクチャ5番のSpineを表示する場合 ]
 $gameScreen.spine(5).setVisible(true);
[ ピクチャ5番のSpineを非表示にする場合 ]
 $gameScreen.spine(5).setVisible(false);
setBone
ボーンを設定します。

setBone(<boneName>, <x>, <y>, <rotation>[, <duration>, <screen>])
<boneName>  
ボーン名
<x>  
X座標(単位:px)
<y>  
Y座標(単位:px)
<rotation>  
角度(単位:ラジアン)
<duration>  
変動時間(単位:フレーム、省略時:1)
<screen>  
スクリーン座標フラグ(true:画面基準/false:Spine座標基準、省略時:true)
duration、screenは省略可能。
ただし省略しなかった場合はそれより前の引数も省略せず指定する必要があります。


[ ピクチャ5番のSpineの'neck'というボーンの座標を(10,20)、角度を90°に設定する場合 ]
 $gameScreen.spine(5).setBone('neck', 10, 20, 1.57);
 ※90° ≒ 90 / 180 * 3.14 ≒ 1.57ラジアン
[ ボーンを60フレームかけて徐々に変動させる場合 ]
 $gameScreen.spine(5).setBone('neck', 10, 20, 1.57, 60);
[ ボーンの座標を、Spine座標基準とした相対座標で指定する場合 ]
 $gameScreen.spine(5).setBone('neck', 10, 20, 1.57, 1, false);
getBoneData
ボーンの情報を取得します。

getBoneData(<boneName>[, <screen>])
<boneName>  
ボーン名
<screen>  
スクリーン座標フラグ(true:画面基準/false:Spine座標基準、省略時:true)
screenは省略可能。


戻り値のデータ形式
{
 x: <X座標>,
 y: <Y座標>,
 rotation: <角度>
}


[ ピクチャ5番のSpineの'neck'というボーンの情報を取得する場合 ]
 let data = $gameScreen.spine(5).getBoneData('neck');
[ ボーンの情報を、座標をSpine座標基準とした相対座標で取得する場合 ]
 let data = $gameScreen.spine(5).getBoneData('neck', false);
getAttachmentData
スロットに紐づくアタッチメントの情報を取得します。

getAttachmentData(<slotName>[, <screen>])
<slotName>  
スロット名
<screen>  
スクリーン座標フラグ(true:画面基準/false:Spine座標基準、省略時:true)
screenは省略可能。


戻り値のデータ形式(メッシュ、境界ボックス)
{
 slotName: <スロット名>,
 attachmentName: <アタッチメント名>,
 data: {
   vertices: [
     <X座標1>, <Y座標1>,
     <X座標2>, <Y座標2>,
     <X座標3>, <Y座標3>,
      :
   ]
 }
}

戻り値のデータ形式(クリッピング)
{
  slotName: <スロット名>,
  attachmentName: <アタッチメント名>,
  data: {
    endSlotName: <終端スロット名>
    vertices: [
      <X座標1>, <Y座標1>,
      <X座標2>, <Y座標2>,
      <X座標3>, <Y座標3>,
       :
    ]
  }
}
戻り値のデータ形式(パス)
{
  slotName: <スロット名>,
  attachmentName: <アタッチメント名>,
  data: {
    lengths: [
      <長さ1>,
      <長さ2>,
      <長さ3>,
       :
    ],
    closed: <クローズ済みフラグ>,
    constantSpeed: <一定速度フラグ>,
    vertices: [
      <X座標1>, <Y座標1>,
      <X座標2>, <Y座標2>,
      <X座標3>, <Y座標3>,
       :
    ]
  }
}

戻り値のデータ形式(ポイント)
{
  x: <X座標>,
  y: <Y座標>,
  rotation: <角度>
}

[ ピクチャ5番のSpineの'neck'というスロットに紐づくアタッチメントの情報を取得する場合 ]
 let data = $gameScreen.spine(5).getAttachmentData('neck');
[ ボーンの情報を、座標をSpine座標基準とした相対座標で取得する場合 ]
 let data = $gameScreen.spine(5).getAttachmentData('neck', false);
hitTest
指定座標の境界ボックス情報のリストを取得します。

hitTest(<x>, <y>[, <screen>])
<x>  
X座標(単位:px)
<y>  
Y座標(単位:px)
<screen>  
スクリーン座標フラグ(true:画面基準/false:Spine座標基準、省略時:true)
screenは省略可能。
取得する情報のデータ形式はgetAttachmentDataコマンドと同様。
指定座標に境界ボックスが存在しなかった場合、空の配列が返されます。


[ ピクチャ5番のSpineの座標(10,20)の境界ボックス情報を取得する場合 ]
 let hits = $gameScreen.spine(5).hitTest(10, 20);
[ 指定座標をSpine座標を基準とした相対座標として境界ボックス情報を取得する場合 ]
 let hits = $gameScreen.spine(5).hitTest(10, 20, false);
Spineイベント
Spineにイベントを設定して音を鳴らしたりスイッチをONにしたりできます。
Spineイベントの詳細については [ Spineユーザーガイド ] をご参照ください。
 (Spineユーザーガイド > イベント)

a) Spineイベントに設定された音声を再生する
 Spineイベントのオーディオパスが設定されている場合、音声ファイルを再生します。

 [ オーディオパスが sound.wav の場合 ]
  audio/se/sound.ogg(sound.m4a)を再生します。
 [ オーディオパスが spine/sound.wav の場合 ]
  audio/se/spine/sound.ogg(sound.m4a)を再生します。

b) 再生される音声の音量とバランスを制御する
 Spineイベントで再生される音声の音量とバランス(位相)を変数で制御することができます。
 Spineイベントの[文字列]に以下のような記述をすることで音量とバランスに変数を紐づけます。

 volume:10,balance:20

 [ 音量を変数10番で制御 ]
  volume:10
 [ 音量を変数20番、バランスを変数50番で制御 ]
  volume:20,balance:50
 
紐づけられた変数の値がそのまま音量やバランス(位相)の値になります。

c) Spineイベントのタイミングでスイッチを操作する
 Spineイベントをトリガーにして任意のスイッチを切り替えることができます。
 Spineイベントの[文字列]に以下のような記述をすることでイベントとスイッチを紐づけます。

 switch:10
 // スイッチ10番をONにする
 !switch:10
 // スイッチ10番をOFFにする
 ~switch:10
 // スイッチ10番を反転する

 [ スイッチ10番をON ]
  switch:10
 [ スイッチ10番をON、20番をOFF ]
  switch:10,!switch:20
 [ スイッチ10番、20番をON、30番を反転 ]
  switch:10,switch:20,~switch:30
上位互換(拡張プラグイン)
上位互換はMV専用の拡張プラグインです。
MZでの動作は保証致しません。
MpiShowSpine.js(以下、旧プラグイン)から本プラグインに乗り換える場合、
下記の拡張プラグインを導入することで旧プラグインのプラグインコマンドや
旧プラグインを使用中にセーブされたデータをそのまま使用することができます。
 [ PictureSpineExtension_UpperCompatible.js ]
旧プラグインとPictureSpine.jsでは仕様が異なるため旧プラグインの挙動を100%保証するものではありません。
期待した動作にならなかったりすでにテストを完了した部分が壊れてしまう可能性に不安を感じる場合は
拡張プラグインは導入せず旧プラグイン(ver.1.12以降)とPictureSpine.jsを両方導入してください。
プラグイン製作者向け情報
本プラグインを通じてSpineを運用したい方は下記コードを参考にしてください。

let spine = new Game_Spine();
let sprite = new Sprite_Spine(spine);
this.addChild(sprite);
spine.setSkeleton('spineboy').setAnimation(0, 'walk');
Game_SpineのインスタンスにはSpineアニメーションの状態がリアルタイムで記録されます。
これを保存しておき、Sprite_Spineのインスタンス生成時の引数として使用することで
保存したときの状態を復元することができます。
利用規約
本プラグインの利用は、RPGツクール/RPG Makerの正規ユーザーに限られます。
商用、非商用、有償、無償、一般向け、成人向けを問わず、利用可能です。
利用の際、連絡や報告は必要ありません。また、製作者名の記載等も不要です。
プラグインを導入した作品に同梱する形以外での再配布、転載はご遠慮ください。
本プラグインにより生じたいかなる問題についても、一切の責任を負いかねます。
更新履歴
ver.1.14
2022.04.13
ゲーム起動時にSpineの自動読み込みを行わない設定を追加
setSkeletonコマンド実行時にSpineを読み込む仕様を追加
数字のみのファイル名のSpineを指定するとエラーになる問題を修正
ver.1.15
2022.04.22
iOS/iPadOSでエラーになる問題に対応
ver.1.16
2022.06.27
アニメーションのミックスが正常に行われない問題を修正
ver.1.17
2022.10.29
特定表示条件下でsetBoneの位置が正しく計算されない問題を修正
ver.1.18
2022.12.09
ver.1.10以前でセーブされたスキンがないモデルをロードした際にエラーになる問題を修正
ver.1.19
2022.12.23
setSkinとsetColor/setMosaicを同時に行うと効果が適用されないことがある問題を修正
ver.1.20
2022.12.27
setSkeletonとsetColor/setMosaicを同時に行うと効果適用前の状態が一瞬表示される問題を修正
ver.1.21
2023.03.11
フォルダ下のスキンやアニメーションに対応