お世話になっております。
まず結論から申し上げますと……
ご想定の方法でパーツが透ける場合、恐らくはSpriteStudio5のデータで
- 「カラーブレンド」のアトリビュートが有効になっていて、カラーブレンドの色のAとrateが255よりも低い値になっている
ことが考えられます。
ですので、カラーブレンドのアトリビュートを未使用にするか、Aとrateのパラメータを255にして頂ければ不透明状態で出力されるかと思われます。
ここからはいささか余談ではあるのですが……
SS5Player for Unityでは、カラーブレンドなどの関係から、Unityの通常のメッシュやスプライトとはメッシュの頂点データの使い方が異なっています(それに伴って、独自のシェーダを使用しています)。
そのため、本来は、Unityのsprite/Diffuseなどの標準(ビルトイン)シェーダとは、互換性がありません。
ですので、本来的には、ビルトインシェーダと交換する用法は非推奨ではあります。
※本来、「メッシュの頂点カラー(Diffuseカラー)」が入っている箇所(Mesh.color32)に、カラーブレンドの色指定が入っている他、追加UV(Mesh.uv2)に追加パラメータが入っています(color32にはカラーブレンドのR・G・B・rateが、uv2にはブレンド方法及びaと透明度が合算されて入っています)。
※また、SS5Player for Unityのシェーダは、(手を加えていない状態では)ライトの計算を行っておりません。
正道としては、SS5Player for Unityのシェーダ(Assets/SpriteStudio/Shaderの中に入っています)をコピーして名前等を変更して・シェーダに光源処理を追記して実装するのが理想的です(もしくは、一度SS5Player for Unityでの表示物をテクスチャにレンダリングしてから、それをsprite/Diffuseなどで表示する……という方法もあります)。
ただ、SpriteStudio5のデータを制限して作成することで、ビルトインシェーダを流用することは可能になります。
具体的には
- カラーブレンドを使用しないか、カラーブレンドの色成分のAとRateを全て255にする(そして大抵の場合、R・G・Bも255である方が一般的な出力を得られるはずです)
- 不透明度を使用しない(常に1にしておく)
- パーツの合成方法が通常以外の場合は、ライトの反映ができない(加算や減算・乗算の合成パーツにはライトの計算が入らない)
- SS5Player for Unityの個々のアニメーションオブジェクトやデータのパーツが回転していても光源に反応しない場合がある(Viewで統合されて表示するので、Viewを大きな1メッシュデータと考えて光源が作用する形になります)。
- 代替で使用するビルトインシェーダで2つ目のUV座標(Mesh.uv2)を使用していないものを選ぶ
などの前提が必要になります。
※実は、やってみたことはないのですが……実装のロジック上、カラーブレンドのR・G・BはDiffuseカラーの指定として使用可能な気がします。Aは255にしておかないとパーツが透けます(できるだけRateも255にしておいてください)。
※不透明度は常に1にしておく……というよりは、Mesh.uv2にカラーブレンドのRateなどと合算されて格納されているために、ビルトインシェーダを使用すると反映されません。
以上となります。
お忙しい中お手数をおかけしてしまい申し訳ございませんがが、何卒ご検証をお願い申し上げます。
※もしそれでも透けてしまう場合は、データそのものを見てみないと原因がわからないかもしれません。