アセットホルダ用インスペクタ詳細解説 - SpriteStudio/SS6PlayerForUnity GitHub Wiki
「SpriteStudio6 Player」モードでの、アセットホルダ用のインスペクタの詳細を解説します。
※「SpriteStudio6 Player」モードのアセットホルダは、Ver.2.0以降でしか存在しません。
- 対象コンポーネント(クラス): Script_SpriteStudio6_HolderAsset
本項目で解説しているのは、大きく下の内容となります。
インスペクタ解説(SS6Playerモード)
SS6Playerモードのアセットホルダの設定項目には「SS6PUが標準で使用するシェーダ定義マテリアル」と「追加のシェーダ定義マテリアル」の2項目が存在しています。
SS6PUが標準で使用するシェーダ定義マテリアル
SS6PUが標準(シェーダ機能を使用していない)状態で使用する全マテリアルのパターンを定義してあります。
通常はこの項目は変更したりする必要はないと思われます。
追加のシェーダ定義マテリアル
SpriteStudio6上でシェーダ機能を使用したり、自作のシェーダなどを作成して使用したりする際に、それらを追加することができます。
(標準シェーダ側では行ってはいますが)各ブレンド種別毎などのマテリアルを定義する必要はあまりないかと思われます(再生中にシェーダのコンパイル時間がかかってしまってマテリアルが一瞬欠けたりするような場合に、ここに各ブレンド種別毎の定義マテリアルを定義しておくことでコンパイル時間が軽減する場合がある……程度ではあります)。
※シェーダ機能で使用するシェーダについては、ここで定義しないでプロジェクト設定の「Always Included Shaders」の中に定義した方が良い場合も存在しますので、ご都合にあわせて使い分けていただけますようお願いいたします。
アセットホルダの役割
SS6PUでの「アセットホルダ(Asset-Holder)」は、抽象的に「そのアニメーションオブジェクトに関連・対応する他のアセットへの参照を保持して、連携データの特定をしやすくしたり・ビルド時のデータ等の欠落を緩和する」ための機能です。
現状で本アセットホルダを持っているのは下記の役割のプレハブ(GameObject)となりますが、「SpriteStudio6 Player(SS6Player)」モードと「Convert To Unity-Native(Unity-Native)」モードで実装が若干異なっています。
- SS6Playerモードのアニメーション(Script_SpriteStudio6_Root)(Ver.2.0以降)
- SS6Playerモードのエフェクト(Script_SpriteStudio6_RootEffect)(Ver.2.0以降)
- Unity-Nativeモードのアニメーション
SS6PlayerモードとUnity-Nativeモードでは下記の実装・仕様が異なります。
SS6Playerモードのアセットホルダ(Ver.2.0以降)
SS6Playerモードの「アセットホルダ」は、現状は主に「アニメーションを再生する際に、同時に持っておくべきシェーダを定義する」ために存在しています。
SS6PUがVer.2.0以降で「使用するマテリアルを動的に作成する」仕様に変更になった際に、本来であればマテリアルで使用するSS6PUが使用しているシェーダを(Unityの「Project Setting」内)[Graphics]-[Always Included Shaders]に定義しないと、シェーダがビルドから除外されてしまい・実行時にマテリアルの生成に失敗するケースが生じます。
これを「緩和(完全な解消ではありません)」するために、「アセットホルダ」に「使用される可能性があるマテリアルのパターン」を定義しておくことでシェーダがビルドから除外されることがないようにする(緩和する)初期目的で設置されています。
SS6Playerモードでのアセットホルダは「Project内のプレハブ」の形で格納されており、このアセットホルダ自体がシーンに実体化することはない前提です。
アニメーションやエフェクト(インスペクタだと「Static Data」の「Holder:Asset」)から、このアセットホルダのプレハブを参照していることで、アセットホルダのプレハブに定義されている「各マテリアルで使用されているシェーダとそのバリアント(各種設定や定義が異なっている状態)は使用する対象である」とUnityに判断させて・ビルド時に最適化で除外されづらいようにしてあります。
シェーダへの各種設定も含んだ形でマテリアルを定義するという形になっているだけであって、このマテリアルを実際に描画で使用するわけではありません(あくまで「このマテリアルで使っているシェーダ」を「このマテリアルで設定されている内容で使う可能性がある」とUnityに判断させるためにマテリアルの形態になっているだけです)。
ですので、シェーダの読込やコンパイル・及びバリアントの管理などを(Unityの機能や自作の機能などで)別途に管理しているアプリケーションの場合には、本アセットホルダを持つ必要はありません(インポータの設定を変更したりして「None」にしてしまって構いません)。
Unity-Nativeモードのアセットホルダ
Unity-Nativeのアセットホルダは、アニメーションのプレハブに含まれるGameObjectに直接「Script_SpriteStudio6_HolderAssetUnityNative」コンポーネントとして付与されています。
Unity-Nativeモードでのアセットホルダは「そのアニメーションで再生することができるAnimationClip(SpriteStudio6での各ssaeに含まれる個別のアニメーションデータを変換したもの)」を定義してあります。
Unity-Nativeモードの場合、このアセットホルダの有無はインポータの「Option:Basic」内「Create Asset-Holder」オプションで設定することが可能です。