0 支持
108 閲覧
(200 ポイント) Q&A
・発生バージョン:5.8.0.6556
・動作環境:Windows7、Unity2018.2.3f1

上の環境にて、

アニメーションにパーツとパーツの間にSpriteRendererを差し込みたいのですが、

可能なのでしょうか?

(SS5Player for Unityではソート基準は優先度にしないといけないとのことですので、

例えば、優先度3のパーツと、優先度1のパーツの間に、優先度2Nullパーツを用意し、そこにSpriteRendererを差し込みたい)

ソート基準をZ座標で管理したアニメーションでテストしたのですが、

アニメーションデータPrefabのZ座標によって、優先度がくずれることがありました。

なのでそもそも可能かのかどうか、

可能なのであれば、その方法をご教授いただければ幸いです。

お手数おかけいたしますが、よろしくお願いいたします。
このページをシェアする

回答 1

0 支持
(1.7k ポイント)

お世話になっております。

SS5/6Player for Unity担当です。

SS5PUについてはそのあたり、昔から色々論議などありまして……まずは端的に結果から言いますと、

「原則的に、SpriteStudioのアニメーションデータの間に他アセットの描画物を割り込ませることはできません」

「ただ、実は、普通に出しても間に(割り込ませたくなくても)割り込んでしまいますが、動作状態が不定になりがちなので、工夫が必要です」

となります。

このあたりは、このSS5PUのGitHubのIssueから派生(リンク)しているTips群になります。

https://github.com/SpriteStudio/SS5PlayerForUnity/issues/183

※リンク先自体はUITextなどの話が中心になっている部分もありますが、同種の話題かつ対処法も似たようなものになると思われます。

※リンク先のコメント内からも別の類似のIssueにリンクしていたりしています(特に「#番号」と書かれているものが別Issueへのリンクです)。

SS5PUはUnity3.57から5.xまでの間でリリースとメンテナンスされていた関係から、その遍歴上で(Unityの機能が変わっていったりする中で)都度ユーザー様から出てきたリクエストを重要視して実装してきた関係もありまして、かなり過渡的な仕様で実装されている機能などもあったりします。

その一つに「View」と呼ばれる単位で「画面上に表示されるSS5のアニメーションオブジェクト群を、独自でバッチング(マージ)」して「少ないメッシュ数にまとめて・ドローコール(現在ではSetPass Calls)を少なくする」という仕様があります。

これがさらに他のアセットとのプライオリティの混在を面倒にしている側面があります。

※この仕様は、現在のSS6PU(SpriteStudio6用のプレーヤ)ではなくなっており・それにまつわる利便性が向上している形になってはいるのですが……当時にユーザー様方から多かったのは、これらの利便性に不都合が生じてもUnityの動的バッチング的な機能(動的なドローコール抑制)が欲しい……という感じでした……というのは余談として。

このViewとの兼ね合いで、間にSpriteRendererなどの他アセット描画オブジェクトを「意図したとおりに挟み込む」ということがかなり難しい構造になっておりますこと、ご容赦いただけますようお願いいたします。

最後に、上記で「割り込んでしまう」というのがありますが……これについては、Unity5系で顕著なのですが、

カメラ・レンダラのSortingOrder・マテリアルに設定されている描画順序(レンダリングパス)・Z座標

などの優先度判定とUnityの動的バッチングの関係から、意図しない形で描画順が混入する場合がある……という意味です。

大枠は以上となります。

ご希望の実装への一助となることを心から願っております。

何卒今後ともよろしくお願いいたします。

(200 ポイント)
お忙しいところ、ご返答いただきありがとうございます!

>「原則的に、SpriteStudioのアニメーションデータの間に他アセットの描画物を割り込ませることはできません」

こちら了解いたしました。

別の表現方法を模索しようと思います。

度々の投稿失礼いたしました!
...