Sprite Swap サンプル
以下のサンプルプロジェクトは、スプライトスワップを使用してさまざまな効果や結果を実現する方法を示しています。
![]()
以下に示すサンプルのシーンはすべて、Assets/Samples/2D Animation/[X.Y.Z]/Samples/4 SpriteSwap にあります。
- Animated Swap (アニメーション化スワップ)
- Part Swap (部位スワップ)
- Full Skin Swap (フルスキンスワップ)
- DLC Swap (DLC スワップ)
- Skeleton Sharing (スケルトン共有)
- Runtime Swap (ランタイムスワップ)
Animated Swap
このサンプルは、スプライトスワップを使用して、スプライトのスワップとスプライトの 変形 の両方を含むアニメーションの再利用可能なアニメーションクリップを作成する方法を示しています。ノート: このサンプルを使用するには、PSD Importer パッケージをインストールしてください。
このサンプルの実際の動作を確認するには、シーンファイル 1 Animated Swap.unity を開きます。
![]()
親指を立てるしぐさをしている最初のフレーム。
このサンプルでは、Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprites にある 2 つの異なるソースファイルを使用しています。使用しているアセットは以下のとおりです。
dialog.psbdialog gray.psb
これらのアセットは、Character Rig プロパティを有効にした状態で PSD Importer を使用してインポートされています。両方のアセットには、同じスケルトンを使用してリグが設定されており、各アセットにはアニメーション中にスワップする 2 つの異なる手のスプライトが用意されています。
![]()
手を開いている状態のフレームにスワップ。
これらは Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 Sprite Swap/Sprite Library にあります。使用しているアセットは以下のとおりです。
dialog.spriteLib
dialog gray.spriteLib
このサンプルシーンを再構築するには、以下の手順に従います。
Project ウィンドウから
dialog.psbプレハブとdialog gray.psbプレハブの両方をシーンにドラッグします。Sprite Library コンポーネント を
dialogゲームオブジェクトに追加した後、dialog.spriteLibアセットを Sprite Library Asset プロパティに割り当てます。Sprite Library コンポーネント を
dialog grayゲームオブジェクトに追加した後、dialog gray.spriteLibアセットを Sprite Library Asset プロパティに割り当てます。dialogゲームオブジェクトの階層を展開して、R_arm_2子ゲームオブジェクトを無効にします。アニメーション中にスワップをするので、このアセットは不要です。R_arm_1ゲームオブジェクトに移動し、Sprite Resolver コンポーネント を追加します。Label ドロップダウンメニューまたはサムネイルからR_arm_2グラフィックを選択します。
dialog grayゲームオブジェクトでステップ 4-5 を繰り返します。Animator コンポーネント を
dialogゲームオブジェクトとdialog grayゲームオブジェクトに追加します。Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 Sprite Swap/Animation/Animatorsで Dialog Animator Controller アセット を探して、このアセットを Animator コンポーネントの Controller プロパティに割り当てます。
このサンプルでは、Sprite Library コンポーネントは Sprite Resolver コンポーネントと同じゲームオブジェクトに割り当てられていません。Sprite Resolver は、まず Sprite Resolver が設定されているのと同じゲームアセットから Sprite Library コンポーネントの特定を試み、その後、ゲームオブジェクト階層を上方向に走査していきます。この仕組みがあるため、Sprite Resolver コンポーネントがアタッチされている共通のルートゲームオブジェクトに Sprite Library コンポーネントをアタッチすることで、1 つまたは複数の Sprite Resolver で同じ Sprite Library コンポーネントを使用できます。
Part Swap
このサンプルは、所定の API を使用し、Sprite Resolver のデータを変更することでスプライトアセットをスワップする方法を示しています。このサンプルの実際の動作を確認するには、2 Part Swap.unity シーンを開きます。

このシーンでは、各部位にはスワップ可能な 3 つの異なる外観のオプションが用意されています。以下のグラフィックアセットが Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprites にあります。
Knight.psbSkeleton.psbWitch.psb
上記の 3 つのグラフィックアセットすべてから構成されるスプライトを含む Sprite Library アセット が作成されています。Category (カテゴリ) はアクターの体の部位ごとに作成されており、3 つの異なるキャラクターバージョンから派生した 3 つの Entry (エントリー) を含んでいます。このアセットは、Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprite Library/Part Swap.spriteLib にあります。
アクターの 3 つのバージョンそれぞれの対応する部位。部位に応じて名前が付けられています。
Sprite Library コンポーネントをシーン内の KnightRig ゲームオブジェクトにアタッチします。Part Swap.spriteLib アセットを Sprite Library Asset プロパティに割り当てます。
KnightRig ゲームオブジェクトの下のすべての Sprite Renderer に Sprite Resolver コンポーネントを追加します。ゲームオブジェクトが表す体の部位に応じて、対応するゲームオブジェクトに合致するスプライトを割り当てます。例えば、KnightRig ゲームオブジェクトにアタッチされている Sprite Resolver に、"Body" カテゴリのスプライトの 1 つを選択するなどです。

この設定を使用すると、アクターの任意の部位を別のスプライトに個別にスワップできます。
Swap Part (部位スワップ) スクリプト
SwapPart という名前のカスタム MonoBehaviour スクリプトが KnightRig ゲームオブジェクトにアタッチされています。このスクリプトは、Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Scripts/Runtime/SwapPart.cs にあります。
![]()
このスクリプトは、スワップ可能なスプライトを取得するために、Sprite Library コンポーネントへの参照を保持します。また、Sprite Resolver コンポーネントで変更可能な、Sprite Library に含まれるスプライトのカテゴリを表すデータの配列も保持します。
Swap Part スクリプトは、開始すると、Sprite Library コンポーネントで使用されている Sprite Library アセットの取得を試みます。
var libraryAsset = spriteLibrary.spriteLibraryAsset;
次に、この Sprite Library アセットから、カテゴリに含まれるエントリーとラベル名を取得します。
var labels = libraryAsset.GetCategoryLabelNames(swapOption.category);
次に、それを使用して UI ドロップダウンリストを作成します。
UI ドロップダウンリストの値を変更すると、該当するスプライトを使用するように Sprite Resolver コンポーネントが設定されます。
swapOption.spriteResolver.SetCategoryAndLabel(swapOption.category, swapOption.dropdown.options[x].text);
Full Skin Swap
このサンプルは、所定の API を使用し、Sprite Library コンポーネントで参照する Sprite Library アセット を変更することでスプライトの外観をスワップする方法を示しています。このサンプルの実際の動作を確認するには、3 Full Swap.unity シーンを開きます。

このシーンには、スワップ可能な 3 つの異なる外観のアセットオプションがあります。以下のアセットが Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprites にあります。
Knight.psbWolf.psbWitch.psb
Sprite Library の各アセットは、用意されているカテゴリ、エントリー、ラベル名は同一ですが、選択されているスプライトは異なります。以下のアセットが Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprite Library にあります。
Knight.spriteLibWolf.spriteLibWitch.spriteLib
Sprite Library コンポーネントを KnightRig ゲームオブジェクトにアタッチします。Knight.spriteLib アセットを Sprite Library Asset プロパティに割り当てます。
KnightRig ゲームオブジェクトの下の Sprite Renderer それぞれに Sprite Resolver コンポーネントを追加します。アタッチ先の体の部位に対応する各 Sprite Resolver にスプライトを割り当てます。例えば、torso ゲームオブジェクトにアタッチされている Sprite Resolver には torso スプライトを選択します。

Swap Full Skin (フルスキンスワップ) スクリプト
SwapFullSkin という名前のカスタム MonoBehaviour スクリプトが KnightRig ゲームオブジェクトにアタッチされています。このスクリプトは、Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Scripts/Runtime/SwapFullSkin.cs にあります。

UI のドロップダウンリストの値を変更すると、該当する Sprite Library アセットを Sprite Library コンポーネントに使用するように設定されます。
spriteLibraryTarget.spriteLibraryAsset = spriteLibraries[value];
DLC Swap
このサンプルは、所定の API を使用し、Sprite Library コンポーネントで参照する Sprite Library アセットを変更することでスプライトの外観をスワップする方法を示しています。このサンプルは、Full Skin Swap サンプルに基づいています。
Full Skin Swap の手法との違いは、ランタイムに Sprite Library アセットを AssetBundle からロードし、後で Sprite Library コンポーネントに追加する点です。このサンプルの実際の動作を確認するには、4 DLC Swap.unity シーンを開きます。

AssetBundle が正しく動作するようにするには、Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprite Library にある Skeleton.spriteLib アセットに、対応する AssetBundle タグのラベルが付いていることを確認します。

"skeleton" というラベルが設定されている Skeleton.spriteLib アセット。
Load Swap DLC (DLC のロードとスワップ) スクリプト
LoadSwapDLC という名前のカスタム MonoBehaviour スクリプトが Load DLC ゲームオブジェクトにアタッチされています。このスクリプトは、Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Scripts/Runtime/LoadSwapDLC.cs にあります。
このスクリプトは、DLC がロードされたときに開始し、AssetBundles をスキャンして Sprite Library アセットを探します。Sprite Library アセットがロードされると、そのエントリーを Full Skin Swap サンプルの SwapFullSkin スクリプトに追加します。