Amazonで商品を見るセール会場へ

Spineのスキン切り替え|Unityコードと確認

Spine のスキンは、同じボーンとアニメーションのまま、見た目(画像)だけを差し替える仕組みです。

衣装違いのキャラクターや、同じ動きの色違いの敵を作るときに使います。

  • スキンを作る:ツリーの「Skins」を選び、「New…」→「Skin」
  • 差し替える場所を作る:スロットを選び、「New…」→「Skin Placeholder」
  • プレースホルダーの名前は、スキン名ではなく部位の名前(head など)にする
  • 実行時は、空のスキンに AddSkin で重ねると組み合わせの着せ替えが作れる

2026年10月3日、現行の公式ガイドとspine-runtimes 4.3のソースを照合しました。

Unity・Spineエディタでの操作再現は含まず、画面の英語名と版ごとの差を分けて説明します。

スキンは Essential にも含まれますが、スキンボーンは Essential では使えません。

Spine のエディタでの再現は含まず、画面の名前は英語版の表記です。

目次

スキンとプレースホルダー

スキンプレースホルダーは、実際の画像の代わりに置く「空き枠」です。

枠の中身は、そのとき表示しているスキンから来ます。

スロットプレースホルダースキン girl の中身スキン boy の中身
headheadgirl/head.pngboy/head.png
bodybodygirl/body.pngboy/body.png
考え方の例

プレースホルダーの名前はスキン名ではなく部位を表す名前にするよう、公式ガイドに書かれています。

スキンを作る手順

  1. ツリーの「Skins」を選び、「New…」→「Skin」でスキンを作る
  2. 差し替えたいスロットを選び、「New…」→「Skin Placeholder」でプレースホルダーを作る
  3. スキンを表示した状態で、プレースホルダーに画像を入れる
  4. 別のスキンを表示して、同じプレースホルダーに別の画像を入れる

スキンの横の丸いアイコンで、表示するスキンを選びます。

一度に表示できるスキンは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やエクスポート済みスキンを上書きしません。

練習ファイルと確認済みの範囲

Spine関連の練習入力とC#コードをダウンロード。

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日に確認)。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

3DCGのおすすめ書籍

3DCG用PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次