SpriteStudio / SS5PlayerForUnity

OPTPiX SpriteStudio 5 Player for Unity
http://www.webtech.co.jp/spritestudio/
MIT License
39 stars 15 forks source link

全般 UGUIを使ってSS5PForUnityの再生管理や座標等の制御を行う事はできますか? #150

Open DKAlpha opened 8 years ago

DKAlpha commented 8 years ago

前提といたしましてそのような使用方法は想定して設計されておりません。 これから提案させていただく方法は検証等の確認はしておりませんので、その旨をご了承ください。 UGUIからSS5Plapyerを制御するといった方法については前例がない事もご理解いただき、NGUIを例に概要をご説明いたします。

■SS5PU 1.2系までの方法で書きます ・シーン上にNGUIのパーツ(これはRectTransformで管理される各パーツ群)を設置→「A」 ・シーン上にSS5PUのオブジェクトを置く(Camera2DやViewの下に置く。空GameObjectの下に本体Prefabがある必要があるので、「~_Control」が望ましいかもしれません)→「B」 ・「A」のパーツにスクリプトを付ける→「C」 ・「C」のスクリプトから、「B」のTransformに対して、「A」の変形情報を読み込んで・書き込む(C::Update関数の中の処理で行うのが普通かと思います)。  ※「C」のスクリプトには以下の参照を持つものとします。  ・シーン上のSSオブジェクトのGameObject(本体Prefabの直上の空GameObject)

原則、NGUIのカメラは、その上にあるUIRootで設定される各種画面設定情報によって、複雑に計算されたNGUI専用の座標管理空間用の拡縮パラメータが入っているので、SSのオブジェクトをストレートにNGUIのCameraに置くことができません(というより、置くとかなり苦労するかと思います)。 そのため、シーン中でSS5の描画オブジェクトはNGUIのCameraとは別に管理して、NGUIの各パーツから変形情報などを引っ張ってくるというのが楽なのではないかと思います。

その際に、座標情報をSS5側で持つか・NGUI側で持つかによって、「C」のUpdate関数内などでの同期処理が変わってくるかと思います(このあたりはゲームの実装仕様に依存します)。 また、NGUIのUIWidgetのパラメータもSS5のオブジェクトサイズと同期させるための、係数なども必要になるかと思いますので(NGUIのWidgetやColliderなどの値も、何かUIRootからのの係数がかかることを期待した値になっている場合があります)、そのあたりはゲーム側での値の調整が必要になるかもしれません。 またUGUIでRectTransformの全部をフォローすることはできないかもしれません。 多分、Widgetのパラメータはあまり係数補正しなくても大丈夫かもしれません。

ただ、Corrider(マウスやタッチのコリジョンの役割)の位置・大きさとかは画面表示と実際とが狂う場合があるかと思います。(これ、NGUIを素で使ってる場合でもある現象です)。 恐らくRectTransformを使った場合、Pivotを考慮したTransformの反映をしなくてはならない(行列計算が絡む可能性が高いです)かと思われます。 そこが苦労するかもしれません。