+2 支持
1.4k 閲覧
要望
タグ変更
Unityで2Dのアプリ(uGui)を作成しているのですが、そのキャラクターの動きにSpriteStudioで作成したデータを利用したいと考えております。

しかし、現状のUnity用のSpriteStudioのプラグインを利用させていただいたところ、SpriteStudio用のカメラを利用した仕組みになっていて、uGuiで使うことができない状況になっていると思います。

uGuiで利用する仕組みはありますでしょうか?もしなければそういった仕組みが欲しいです。

※現状でもSpriteStudioのカメラの情報を読み込んでテクスチャに投影して、uGuiで利用できることは確認できましたが、実装コストを考えると現実的ではなく、もっと簡単な方法を模索しています。 UnityのAnimation/Animatorファイルを吐き出してもらえるとすごくうれしいです!!
このページをシェアする

回答 1

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

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

使用するuGUIの機能にもよるのですが……uGUIのレンダリングカメラでSS5Player for Unity(以降SS5PU)のパーツを扱うことは通常範囲で可能です。

また、非常に基本の部分のみ記載しますので、色々な使用状況や使用機能などでの処置などは省いていますこと了承ください。

※お使いのSS5PUのバージョンにもよるのですが、Ver.1.3.0以降の前提で記載します。


uGUIを使用しているプロジェクトに、SpriteStudio/Camera/BaseSet_Ver_1_3の中の「View (Manager-Draw)」のプレハブを設置します。

このViewの

  • Cameraに、uGUIをレンダリングしているカメラを設定する
  • レイヤーをUIにしておく(これはDefaultでも大丈夫な気がしないでもないですが、複数カメラがあった場合に全部のカメラでレンダリングされたりする場合があるので注意してください)

を行います。

このViewはCanvasの子に入れても良いですし、シーンのルートに置いたままでも構いません(ご使用の状況に併せてください)。

※一応、Canvasの子に入れておくのがよいのかなぁとも思ったりします。

ちなみに、このViewが、SS5PUのアニメーション群を(SetPass Callsを節約するために)まとめてレンダリングするための機能オブジェクトです。


その上で、SS5PUのアニメーションのプレハブを(例えばこの場合は例として)uGUIのButtonの子として配置して、このアニメーションのオブジェクトの

  • Viewに、上で設置したViewを設定する。

ことを行います。

※この時、uGUIの座標空間(Canvasの設定による)とSS5PUのアニメーションの座標空間(単位がピクセル)とで、縮尺が異なる場合があるので、その場合はSS5PUのアニメーションオブジェクトのGameObjectのTransformのScaleのX/Yを設定してやる必要があります。

必要に応じて、Buttonの設定を変更する(例えばuGUIのボタンを消したい場合)ButtonのImage(Script)コンポーネントのEnableをOFFにしてしまえばuGUIのボタンが消えます。


他にあるとすれば、気をつけなくてはならないのは、

  • uGUIのCanvasが若干色々隠れた(?)処理をしていて(画面のスケーリングとかの制御)、カメラやアニメーションオブジェクトの座標などの設定を間違うと、画面外に描画されてしまったりなどがちょくちょく起こる(ほぼほぼ、NGUIのUIRootと同様のことを処理しているのかな?と、個人的には思っていますが……)。
  • SS5PUのアニメーションオブジェクトやViewなどで、他のGameObjectとの親子関係を変更したりした場合に、TransformのPositionなどが書き換わっている(親子関係変更での位置やスケールなどの再計算が行われるため)ことがある。
  • カメラがパースペクティブの時に特に起こりやすいのですが……表示オブジェクトがニアクリップに引っかかっていたりしないかをチェックしてください。
  • 複数のカメラをシーン中で使用している場合、互いのカメラでレンダリングするレイヤーが正常であるか(不足がないか、もしくは多重でレンダリングしているレイヤーがないか?)と、クリア時のパラメータの都合で他のカメラの描画結果を書き潰したりしていないか(各カメラの描画順序の「Depth」の設定値は正しいか?また、最初にレンダリングするカメラ以外がClear FlagがSolid ColorやSkyboxになっていたりして、それ以前の描画カメラの結果を潰していないか?など)

……などがあります。


一応、過去にSS5PUのGitHubでも似たような質問がありましたので、そちらへのリンクを記載します。

・v1.3.x NGUIとの共存する方法について

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

・v1.3.9 SS5描画と通常GameObject描画の表示順制御につきまして

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

※主にこれらは、NGUIの前提で書かれていますが、NGUIとuGUIは設計的にかなり近いと思われる(というより双子のようなものだと私は解釈しています)ため、基本的な考え方や処置については同じとなります。


最後に、SS5のデータを制限付きながら、UnityのAnimatorに落とすためのアセットは存在いたします。

「SS5Converter for Unity2D (SS5CUないしはSS5CU2D)」
https://github.com/SpriteStudio3rdParty/Ss5ConverterForUnity2D

※ただし、

「使用するアトリビュートに制限がある」

「複数のテクスチャや合成方法をSS5の1つのアニメーションの中で使用していない(使用している場合描画順序が不定になることがあります)」

「インスタンスやエフェクト機能は使えない」

「Unity5.0以降ではパッチをあてる必要がある(SS5CU2Dのリンク先のIssueに記載があります)」

……という状況での運用が可能である場合であれば、お使いいただけるかと思います(ただし、このSS5CU2DとSS5PUとは別アセットなので、相互の互換性はありません)。


……こんな感じになりますが、ご要望に返答できておりますでしょうか?

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


追伸:

蛇足となりますが……SS5PUのカメラは特殊なことは一切しておらず、通常のUnityの平行投影設定のカメラです。

あくまで、良く使用すると思われる平行投影のフルHDと720pのカメラをサンプルとして入れてあるだけとなります。

※Camera直下にあるものは、Ver.1.2.x以前との互換性のために同じ名前・同じ位置・同じGUIDで設置されているものになります(Ver1.3以降でのカメラは、厳密にはCamera/BaseSet_Ver_1_3以下のものになります)。

ですので、ユーザーの方々で独自設定したカメラや、パースペクティブ(主に3D空間用)カメラなどでも、SS5PUオブジェクトはレンダリングすることは可能です。


追伸2:

まだ検討段階ですが……SS5PUの後継となる、SS6用のUnity Player(一応仮称をSS6PUとしておきます)では、

  • Viewの原則的な廃止(Unityの通常のFBXなどの3Dデータと同様に、個々のアニメーションオブジェクトがMeshRendererを持ち、Viewで統合的にメッシュバッチングしない形)
  • 拡張機能(附属ツール的な感じ)でSS5CU2Dの後継的なものを搭載(SS5CU2Dと同様にAnimatorにデータを変換するツールになりますが、仕様や実装は全くの別ですので、後継ではなく後継「的」というのが正しいかと思われます)

することが現在検討されています(実際に対応するかや、SS6PUのどのバージョンからか?などについては、未確定ではありますが……)。

(4.9k ポイント)
自明的なことではあるのですが……追加で。

SS5PUのアニメーションをuGUIから制御した場合、例えばButtonのカラーティント(オンカーソルしたりした際の色換え)などは使用できなくなるため、

OnClickやOnPointer~などのメソッドを実装・定義してやって、その中からアニメーションを切り替えてやる必要があります。

※実は、マウスやタッチのコリジョン判定コールバック内からアニメーションを切り替えたりするのは、個人的には推奨できないかなぁと思う部分もあるので(ライフサイクル上での処理タイミングが色々違うはずなので)……OnClickなどの中では「次に遷移するアニメーション」を定義するようにして、主要なアニメーション切り替え処理などはUpdateなどの定常の処理タイミングで再生開始するほうがよいのではないかと思ったりします。

※ティントなどの機能が使えなくなる理由は、SS5のアニメーションデータは最終的にuGUIでのUnity2Dなどの形式ではなく、どちらかというとFBXなどをインポートしたときと同様の3Dメッシュデータの形態をとるため、管理方法が違ったりとか色々な事情があります(マルチパーツが前提であることや・マニアックな方面では頂点の色成分を頂点カラーではなく、カラーブレンドのパラメータとして使用していたりなど……という理由も存在しています)。
...