Spine のスキンは、同じボーンとアニメーションのまま、見た目(画像)だけを差し替える仕組みです。
衣装違いのキャラクターや、同じ動きの色違いの敵を作るときに使います。
- スキンを作る:ツリーの「Skins」を選び、「New…」→「Skin」
- 差し替える場所を作る:スロットを選び、「New…」→「Skin Placeholder」
- プレースホルダーの名前は、スキン名ではなく部位の名前(head など)にする
- 実行時は、空のスキンに AddSkin で重ねると組み合わせの着せ替えが作れる
2026年10月3日、現行の公式ガイドとspine-runtimes 4.3のソースを照合しました。
Unity・Spineエディタでの操作再現は含まず、画面の英語名と版ごとの差を分けて説明します。
スキンは Essential にも含まれますが、スキンボーンは Essential では使えません。
Spine のエディタでの再現は含まず、画面の名前は英語版の表記です。
スキンとプレースホルダー
スキンプレースホルダーは、実際の画像の代わりに置く「空き枠」です。
枠の中身は、そのとき表示しているスキンから来ます。
| スロット | プレースホルダー | スキン girl の中身 | スキン boy の中身 |
|---|---|---|---|
| head | head | girl/head.png | boy/head.png |
| body | body | girl/body.png | boy/body.png |
プレースホルダーの名前はスキン名ではなく部位を表す名前にするよう、公式ガイドに書かれています。
スキンを作る手順
- ツリーの「Skins」を選び、「New…」→「Skin」でスキンを作る
- 差し替えたいスロットを選び、「New…」→「Skin Placeholder」でプレースホルダーを作る
- スキンを表示した状態で、プレースホルダーに画像を入れる
- 別のスキンを表示して、同じプレースホルダーに別の画像を入れる
スキンの横の丸いアイコンで、表示するスキンを選びます。
一度に表示できるスキンは1つですが、Skins ビューでピン留めすると、複数を同時に表示できます。
スキンを右クリックして「Duplicate」を選ぶと、スキンを複製できます。
スキンにボーンやコンストレイントを入れる
スキンには、画像だけでなく、ボーンやコンストレイントも入れられます。
スキンに入れたボーンは、そのスキンを表示しているときだけ有効になります。
ボーンを選んでプロパティの「Add to Skin」を押すか、スキンにドラッグします。
マントのあるスキンにだけ、マント用のボーンを持たせる、といった使い方です。
スキンボーンは Essential では使えず、コンストレイントも Professional だけの機能です。
defaultスキン
どのスキンにも入れていない画像は、「default」スキンに入ります。
実行時は、まず今のスキンから画像を探し、無ければ default スキンから探します。
全スキン共通の部分(影など)は、スキンに入れず default に置いておけます。
Unityで切り替える
spine-unity 4.3 の公式の例では、スキンを変えたあとに SetupPoseSlots を呼びます。
4.3のスキン変更ではSetupPoseSlotsを使い、4.2以前のSetSlotsToSetupPoseとは区別します。
下のスクリプトは参照先とスキン名を確認してから変更します。
すでにスキンがある状態で別のスキンに変えると、前のスキンの画像が付いていたスロットだけが切り替わるため、スロットを初期の状態に戻す必要があります。
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で動かす方法で紹介しています。
書き出しからスキンを外す
スキンの書き出しのチェックを外すと、そのスキンは JSON・バイナリ・画像・動画のどれにも書き出されません。
4.3 では、スキンごとにテクスチャアトラスを書き出す機能も加わりました。
組み合わせコードの入力と表示結果
CombineSkins.csは4.3のSkeletonAnimationがある練習用GameObjectへ追加し、Skeleton Animation欄へそのコンポーネントを指定します。
Base Skin NameとExtra Skin Nameは書き出しデータ内の名前に合わせます。
例の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)
参考:Esoteric Software「Skins」「Runtime Skins」「spine-unity Main Components」、spine-runtimes 4.3 CHANGELOG(2026年9月29日に確認)。
