Spineのスキンは、アニメーションを再利用しながら、衣装などのアタッチメントや有効なボーン・コンストレイントを切り替える仕組みです。
衣装違いのキャラクターや、同じ動きの色違いの敵を作るときに使います。
- スキンを作る:ツリーの「Skins」を選び、「New…」→「Skin」
- 差し替える場所を作る:スロットを選び、「New…」→「Skin Placeholder」
- プレースホルダーの名前は、スキン名ではなく部位の名前(head など)にする
- 実行時は、空のスキンに AddSkin で重ねると組み合わせの着せ替えが作れる
2026年10月23日、公式ガイド・変更履歴とspine-runtimes 4.3のソースを再照合しました。
旧ガイドに残る利用制限と4.3の仕様は区別しています。
Unity・Spineエディタでの操作再現は含まず、画面の英語名と版ごとの差を分けて説明します。
Spine 4.3ではEssentialでもスキンボーンとスキンコンストレイントに対応しています。
4.3.78-betaの変更履歴と公式サポートの案内を根拠にしています。
スキンとプレースホルダー
スキンプレースホルダーは、実際の画像の代わりに置く「空き枠」です。
アタッチメントはスロットに取り付ける画像などの要素で、スロットは表示するアタッチメントを管理する場所です。
枠の中身は、そのとき表示しているスキンから来ます。
| スロット | プレースホルダー | スキン girl の中身 | スキン boy の中身 |
|---|---|---|---|
| head | head | girl/head.png | boy/head.png |
| body | body | girl/body.png | boy/body.png |
プレースホルダーの名前はスキン名ではなく部位を表す名前にするよう、公式ガイドに書かれています。
スキンを作る手順
- ツリーの「Skins」を選び、「New…」→「Skin」でスキンを作る
- 差し替えたいスロットを選び、「New…」→「Skin Placeholder」でプレースホルダーを作る
- スキンを表示した状態で、プレースホルダーに画像を入れる
- 別のスキンを表示して、同じプレースホルダーに別の画像を入れる
スキンの横の丸いアイコンで、表示するスキンを選びます。
差し替え前に、元プロジェクトを別名で保存し、編集するスキンをアクティブにしてください。
アタッチメントを選択しているのにSkin Placeholderを作れない場合は、アクティブなスキンがあるか確認します。
画像を枠へドラッグすると、その枠の中身がアクティブなスキンに登録されます。
同じスキンの同じ枠に既存のアタッチメントがあると、それは削除されます。
既存画像の変形設定を引き継ぎたい場合は、枠そのものではなく、枠の下にある既存アタッチメントへドロップします。
ここまでの条件は公式のSkin attachmentsをもとにしています。
編集対象としてアクティブにできるスキンは1つです。
Skinsビューでピン留めすれば、複数のスキンを同時に表示できます。
スキンを右クリックして「Duplicate」を選ぶと、スキンを複製できます。
作成後はgirlとboyを1つずつアクティブにし、同じheadの枠で画像が切り替わるか確認します。
次に同じアニメーションを再生し、画像を表示・非表示にするキーも両方のスキンに反映されるかを確かめます。
スキンにボーンやコンストレイントを入れる
スキンには、画像だけでなく、ボーンやコンストレイントも入れられます。
スキンに入れたボーンは、そのスキンを表示しているときだけ有効になります。
ボーンを選んでプロパティの「Add to Skin」を押すか、スキンにドラッグします。
マントのあるスキンにだけ、マント用のボーンを持たせる、といった使い方です。
4.3ではEssentialでもスキンボーンとスキンコンストレイントを使えます。
ただし、すべての種類のコンストレイントがEssentialで作成可能という意味ではありません。
defaultスキン
どのスキンにも入れていない画像は、「default」スキンに入ります。
実行時は、まず今のスキンから画像を探し、無ければ default スキンから探します。
名前で画像を探すキーは、スロットとプレースホルダー名の組です。
この例ではgirl/head.pngを直接指定するのではなく、共通の枠名headを使って差し替えます。
全スキン共通の部分(影など)は、スキンに入れず default に置いておけます。
Unityで切り替える
spine-unity 4.3 の公式の例では、スキンを変えたあとに SetupPoseSlots を呼びます。
4.3のスキン変更ではSetupPoseSlotsを使い、4.2以前のSetSlotsToSetupPoseとは区別します。
下のスクリプトは参照先とスキン名を確認してから変更します。
4.3では描画とアニメーションが別コンポーネントのため、_SkeletonDataをシーンへドラッグしてSkeletonAnimationを選び、描画コンポーネントとともに生成してから使用してください。
すでにスキンがある状態で別のスキンに変えると、前のスキンの画像が付いていたスロットだけが切り替わるため、スロットを初期の状態に戻す必要があります。
4.2以前との違い
4.3 で、C# の SetSlotsToSetupPose は SetupPoseSlots に名前が変わりました。
4.2 以前の spine-unity では、SetSlotsToSetupPose を使います。
スキンを組み合わせる
髪型・服・帽子を別々のスキンにしておき、実行時に組み合わせることができます。
using Spine.Unity;
using UnityEngine;
// spine-unity 4.3 専用。4.2 以前の Setup Pose API とは混ぜない。
public class CombineSkins : MonoBehaviour
{
public SkeletonAnimation skeletonAnimation;
public string baseSkinName = "skin-base";
public string extraSkinName = "hair/pink";
void Start() { TryCombine(); }
public bool TryCombine()
{
if (skeletonAnimation == null || skeletonAnimation.Renderer == null ||
skeletonAnimation.SkeletonDataAsset == null)
{
Debug.LogError("SkeletonAnimation・描画コンポーネント・Skeleton Data Assetを確認してください。", this);
return false;
}
if (string.IsNullOrEmpty(baseSkinName) || string.IsNullOrEmpty(extraSkinName))
{
Debug.LogError("データに存在する2つのスキン名を指定してください。", this);
return false;
}
skeletonAnimation.Initialize(false);
var skeleton = skeletonAnimation.Skeleton;
var state = skeletonAnimation.AnimationState;
if (skeleton == null || state == null)
{
Debug.LogError("スケルトンを初期化できません。Consoleを確認してください。", this);
return false;
}
var baseSkin = skeleton.Data.FindSkin(baseSkinName);
var extraSkin = skeleton.Data.FindSkin(extraSkinName);
if (baseSkin == null || extraSkin == null)
{
Debug.LogError("指定したスキンがデータにありません。Export設定と名前を確認してください。", this);
return false;
}
var combined = new Spine.Skin("practice-combined");
combined.AddSkin(baseSkin);
combined.AddSkin(extraSkin);
skeleton.SetSkin(combined);
skeleton.SetupPoseSlots();
state.Apply(skeleton);
return true;
}
}
公式の例をもとに、スキン名を「skin-base」「hair/pink」として書いています。
spine-unity の導入は、SpineをUnityで動かす方法で紹介しています。
書き出しからスキンを外す
通常はスキンのExportチェックを外すと、そのスキンとアタッチメントは書き出し対象から外れます。
ただし、データ書き出しのExport allを有効にするとExportを外した項目も含まれるため、両方の設定を確認してください。
4.3 では、スキンごとにテクスチャアトラスを書き出す機能も加わりました。
スキンを除外するときは、その中のメッシュを参照するリンクメッシュにも注意してください。
元メッシュが書き出されない場合、そのリンクメッシュも書き出し対象から外れます。
除外したアタッチメントに設定されたアニメーションのキーも出力されないため、書き出し後のデータで表示を確認します。
組み合わせコードの入力と表示結果
CombineSkins.csは4.3のSkeletonAnimationがある練習用GameObjectへ追加し、Skeleton Animation欄へそのコンポーネントを指定します。
Base Skin NameとExtra Skin Nameは書き出しデータ内の名前に合わせます。
フォルダーに入れたスキンはhair/pinkのようにフォルダー名を含めます。
例のskin-baseとhair/pinkがないデータでは処理を止めます。
共通の体をベース、髪だけを追加スキンとして用意します。
同じスロット・プレースホルダーに両方のスキンがアタッチメントを持つ場合、後からAddSkinした側で置き換わるため、順序も入力の一部です。
Playで体と髪が表示され、次に追加スキンだけを別名へ替えて再生し、体が保たれるか比較します。
SetupPoseSlotsはアタッチメントだけでなく、スロットの色や描画順などもセットアップ状態へ戻します。
その後に現在のAnimationStateを適用し、手動で変更していたアタッチメントや色があれば最後に再設定します。
アニメーションにアタッチメントのキーがあれば、その結果が表示を変える場合も確認します。
| 症状 | 確認する結果 | 切り分け |
|---|---|---|
| 名前が見つからない | 元のスキンは変更しない | 大文字・小文字、Export対象を確認 |
| 一部の画像が消える | 共通部分とdefaultの有無 | プレースホルダー名と共通のアタッチメントを確認 |
| 髪が期待と違う | 追加順と同じスロットの競合 | 1スキンずつ表示して比較 |
| 再生すると別画像になる | アタッチメントのキー | 停止状態とアニメーション適用後を分ける |
確認後はPlayを停止して練習スクリプトを無効化し、元のInitial Skinとアニメーションを確認します。
実行時の合成だけで元の.spineやエクスポート済みスキンを上書きしません。
練習ファイルと確認済みの範囲
2本のC#例は参照・名前・待ち時間の異常系をローカルのテストダブルで検査し、4.3のAPI宣言を一次資料で照合しました。
実際のSpine/Unityコンパイル・描画・スキン・書き出し・変形は未検証です。
コードは4.3用です。
練習の完了は、それぞれ本文の表示・再生・復元を実環境で確認して判断します。
まとめ
- スキンは「New…」→「Skin」、差し替える枠は「Skin Placeholder」
- プレースホルダーは部位の名前にする
- スキンに入れていない画像は default スキンに入る
- Unity では SetSkin のあとに SetupPoseSlots(4.2 以前は SetSlotsToSetupPose)
参考:Skins、Runtime Skins、spine-unity Main Components 4.3、変更履歴、Essential対応の公式回答(2026年10月23日確認)。
2026年10月26日にSkins・Runtime Skins・Main Components 4.3・変更履歴を再照合しました。
今回もSpineとUnityの実機操作、コンパイル、描画は行っていません。
