ぼっちブログ

個人ゲーム開発者やっています。主に購入したUniyアセットの使用感を書いていきます。

【Unity】ワールド座標をCanvas上のRectTransformの座標に変換する

使うときになったら忘れてて、毎回調べてる気がするのでメモ。

とりあえず、これ参考です。

tsubakit1.hateblo.jp

まずはワールド上の座標をスクリーン座標(RectTransform上の座標ではない)に変換します。

var screenPoint = RectTransformUtility.WorldToScreenPoint(Camera.main, worldPoint);

次にスクリーン座標からCanvas上のRectTransformの座標に変換するのですが、これがCanvasのRender Modeの違いで方法が変わります。

Render ModeがScreen Space - Overlayの場合、

var localPoint = Vector2.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, screenPoint, null, out localPoint);

と、カメラをnullにします。

Render ModeがScreen Space - Cameraの場合、

var localPoint = Vector2.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, screenPoint, canvas.worldCamera, out localPoint);

と、Canvasが指定しているカメラを指定します。

docs.unity3d.com

ちゃんとマニュアル読めば書いてありますが、Render ModeがScreen Space - Overlayの場合、カメラをnullにしないといけないのが注意。