GetWorldCornersとWorldToScreenPointの挙動

①・RectTrans.GetWorldCorners
②・RectTransformUtility.WorldToScreenPoint
という関数があります。

①はUGUIの4隅のスクリーン座標を取る関数
②はRectTransのpositionからスクリーン座標に変換する関数です。

Anchorが左上の場合、どちらも同じ座標を取得する事が出来ると考えていたのですが
UGUIのCanvasがCameraSpaceの場合にのみ想定どおりの値にならず苦労しました。

色々調べてみたところ
GameObjectのAwake(Start)が呼ばれる前と後で挙動が異なるようで

呼ばれる前はGetWorldCornersが正確な値を取得
呼ばれた後はWorldToScreenPointが正確な値を取得
というなんだかよくわからない状況。

Awakeを呼ぶ前に値を取得する事があるのかと言われると
UGUIの生成をScriptから行う場合は生成フレームにおいては全然ありえるわけでして。

もしかしたら使い方が間違っていたり、UnityのTransformの仕様を理解していないせいかもしれません。
とはいえど、YUIMgrのGetPosGlobal関数(Screen上の仮想位置を親子関係を無視して取得)する関数の挙動に影響があります。
とりあえずAwake(Start)前後で内部の挙動を変更する事で常に正常な値をとれるようになりました。

予定にはありませんでしたが
修正版のYUIMgr1.0.5をリリースしたいと思います。

ちなみにOverRayでは発生しませんでした。

  • Pocket
  • LINEで送る
  • このエントリーをはてなブックマークに追加

コメント

コメントを残す




Menu

HOME

TOP