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.psb
dialog 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.psb
Skeleton.psb
Witch.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.psb
Wolf.psb
Witch.psb
Sprite Library の各アセットは、用意されているカテゴリ、エントリー、ラベル名は同一ですが、選択されているスプライトは異なります。以下のアセットが Assets/Samples/2D Animation/[X.Y.Z]/Samples/5 SpriteSwap/Sprite Library
にあります。
Knight.spriteLib
Wolf.spriteLib
Witch.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
スクリプトに追加します。