0 支持
2.3k 閲覧
Q&A
uGUI のヒエラルキー上で SpriteStudio6 で作成したアニメーションを、UI の優先度順に表示する方法はございますでしょうか?

例えば、以下のような構成です。

┬ Image 背景 (Z:0.0f)

├ SpriteStudio アニメーション (Z:-1.0f)
└ Button ボタン (Z:-2.0f)

上記の構成の場合、Z座標で制御を行うとボタンの座標を-2.0fに設定すると、SpriteStudio のアニメーションが背景の後ろ側で描画されます。

uGUI の描画ではヒエラルキーの上から順に描画されますので、それに合わせて SpriteStudio のアニメーションも描画したいと思っております。

もし、解決策がございましたら、ご教示いただけますでしょうか?
このページをシェアする

回答 1

0 支持
(5.0k ポイント)
編集

お世話になっております。SS6Player for Unity担当です。

uGUIの場合、描画順が特徴があるのですが、純然と組んだ場合には、仰られている通りヒエラルキーの上から下になります。

ただ、Sorting LayerとOrder In Layer(これらを以下「SortingOrder」と書いています)を使用して、他の表示オブジェクトとの順番を制御することは可能です。

代表的な方法としては、

で紹介されている方法になるかと思います。


SS6Player for Unityの……

  • 「SS6Playerモード」でご使用の場合……
    アニメーションオブジェクトにMeshRendererが1つ付いていますので、このMeshRendererにSortingOrderをC#スクリプトから操作してやることで、他のSortingOrderで描画順を制御しているオブジェクトとの描画順序を制御することが可能です。
    ※MeshRendererのSortingOrderはインスペクタから隠れてしまっていますが、各種「~Renderer」の基部処理である「Renderer」クラスにSortingOrderの機能などがあるため、C#スクリプトからはアクセス可能です。
    ※SS6Playerモードの場合は、複数のパーツをプレーヤーでバッチングしてしまい、「1つの3Dモデル」と同じにしてしまうため、次の描画オブジェクトのSortingOrderは、SS6の表示オブジェクトに設定した値+1で構いません(Unityから見た場合、SS6Playerモードでの描画アニメーションオブジェクトは「1つ」に見えます)。
     
  • UnityNativeモードでご使用の場合
    アニメーションオブジェクトの一番上(Rootに相当する)のGameObjectに「Script_SpriteStudio6_RootUnityNative」というスクリプトコンポーネントがありますので、このSortingOrderの値を変更することで同様のことが可能になります。
    ※UnityNativeモードの場合、各パーツが個別にRendererを持っており・やはりSortingOrderを使用してパーツの描画順序を制御しています。そのため、「SortingOrderの値+CountDrawPartsMax」の値が次の(一つ上にくる表示オブジェクトの)SortingOrderの値になります点、ご注意お願い致します(Unityから見た場合、UnityNativeモードの描画アニメーションは「1つの描画パーツが1描画オブジェクト」として見えています)。
    ※UnityNativeモードでの「Script_SpriteStudio6_RootUnityNative」の詳細な扱いについては、下記のGitHub上のIssueにございます。
    https://github.com/SpriteStudio/SS6PlayerForUnity/issues/28
     

本件については以上となります。ご要望の解決の一助となれば幸いです。

何卒今後とも宜しくお願い致します。

また、何かご質問などございましたら、お気軽に宜しくお願い致します。


追伸:

MeshRenderer等で隠れてしまっているSortingOrderを表面に出す方法の一例としては

https://qiita.com/Fuji0k0/items/d5b32d4796e0a33fc25c

Quiita上(@Fuji0k0様) 「[Unity]MeshRendererのsortingLayer/sortingOrder拡張」

などがあるかと思います。

...