UnityのSpriteMaskおよびRectMask2Dに対応しました
February 22nd, 2019
ついに、spine-unityランタイムでUnityのスプライトマスクおよびUnity UIのRectMask2Dに対応しました!
スプライトマスクは、マスキング画像に基づいてスケルトンまたはスケルトンのグループの一部を隠したり、表示したりするために使用することができます。この機能は、SkeletonAnimation
と SkeletonMecanim
両方のコンポーネントに対して実装されています。また、spine-unityランタイムに同梱されているすべてのシェーダーをそのままサポートしています。
RectMask2Dは、スプライトマスクコントロールに似たマスキングコントロールで、Unity UI SkeletonGraphic
オブジェクトを矩形領域に制限するために使用され、マスキング画像を使用するよりも優れたパフォーマンスを発揮します。
スプライトマスクとSpineスケルトン
SkeletonAnimation
および SkeletonMecanim
コンポーネントは、Unityのビルトインコンポーネント、SpriteRenderer
で利用できるのと同じマスクインタラクションモードを反映して、Inspectorに Mask Interaction
という追加フィールドを提供します:
以下のマスクインタラクションモードが提供されています:
None
: このモードが設定されている時、スプライトはマスキングシステムと相互作用しません。(デフォルトの動作)Visible Inside Mask
: このモードが設定されている時、スプライトはマスクが存在する領域でのみ表示されるようになります。Visible Outside Mask
: このモードが設定されている時、スプライトはマスクが無い領域でのみ表示されるようになります。
自動生成されるマテリアル
Play
モード外でInspector上でマスクインタラクションモードを切り替えると、各 Stencil Compare
パラメータに対して追加のマテリアルアセットが生成されます。これらの追加マテリアルアセットは、ファイルの接尾辞に _InsideMask
および _OutsideMask
を使用し、元のマテリアルと同じフォルダに配置されます。
デフォルトでは、 Skeleton Animation
は、生成されたすべてのマテリアルへの参照を保持します。これにより、多くのコンポーネントインスタンス間でマテリアルを共有でき、実行時にマテリアルをその場で生成することによるオーバーヘッドを削減できます。生成されたマテリアルは、SkeletonAnimation
コンポーネントの Advanced
セクションで以下のように管理・最適化することができます:
Clear
ボタンを押すと、不要なマテリアルへの参照をクリアすることができます。Delete
ボタンを押すと、そのマテリアルへの参照をクリアし、アセットを削除することができます。しかし、他のゲームオブジェクト上のSkeletonAnimation
コンポーネントが、まだそのマテリアルを参照している可能性があるため、注意して使用してください!Set
ボタンを押すと、それぞれのマテリアルへのリンクを再割り当てして、実行時に使用できるように準備することができます。そのマテリアルが存在しない、または削除されている場合は、デフォルトのマテリアルに基づいて再度生成されます。
実行時に Mask Interaction
を変更する場合、コンポーネントは、利用可能であれば、事前に生成されたマテリアルを使用します。Advanced
セクションで削除されたなどにより、これらの生成済みマテリアルが見つからなかった場合、デフォルトのマテリアルのコピーがその場で生成されます。しかしこれらのマテリアルは Skeleton Animation
コンポーネント間で共有されないため、実行時に頻繁にその場で生成することになってしまうと、オーバーヘッドになる可能性があります。そのため、できる限り事前に生成されたマスキングマテリアルを使用することをお勧めします!
Stencil Compare
シェーダーパラメーター
さらなるカスタマイズのために、spine-unityランタイムが提供している全てのシェーダーで Stencil Compare
パラメーターを公開するようになりました。これにより、実行時にマテリアル管理をカスタマイズするための最大限の柔軟性が得られ、ランタイム自体がサポートする3つのバリエーションよりも多くのマテリアルバリエーションを作成することができます。
利用可能な Stencil Compare
の値は以下の通りです:
Mask Interaction - None
用にCompareFunction.Disabled
。Mask Interaction - Visible Inside Mask
用にCompareFunction.LessEqual
。Mask Interaction - Visible Outside Mask
用にCompareFunction.Greater
。
Unity UI - 矩形マスクとSkeletonGraphic
SkeletonGraphic
が使用するシェーダーが、Unityの RectMask2D コンポーネントをサポートするようになりました。矩形マスクは、SkeletonGraphicの SkeletonGraphic
の子要素を親要素の矩形に制限するために使用することができます。
上の例では、3つの SkeletonGraphic
オブジェクトがそれぞれ RectMask2D
コンポーネントを持つ親を持ち、矩形領域に拘束しています。 RectMask2D
は、標準のマスクコントロールよりも自由度の面では制限されますが、より良いパフォーマンスを発揮します。
今回spine-unityランタイムに追加されたこれらの機能が、より素晴らしいビジュアルのゲームやアプリを作成するための一助になることを願っています。ぜひSpine forumでご意見をお聞かせください。