RectTransformUtilityとは?
Unityにおいて、Canvas以下にあるGameObjectはTransformの代わりに
UI要素の位置やサイズ調整を行う際に使用する、RectTransformコンポーネントを持っています。
RectTransformUtilityはRectTransformに関する便利な機能を提供するクラスです。
スクリーン座標をローカル座標に変換する
ScreenPointToLocalPointInRectangleメソッドを使用します。
以下の例の場合、マウス座標を、第1引数に渡したRectTransform上のローカル座標に変換し、
localPointとして返します。
private void Update()
{
Vector2 localPoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(
rectTransform,
Input.mousePosition,
Camera.main,
out localPoint
);
}
ワールド座標をスクリーン座標に変換する
WorldToScreenPointメソッドを使用します。
Vector3 screenPoint = RectTransformUtility.WorldToScreenPoint(Camera.main, worldPosition);
スクリーン座標が矩形の範囲内にあるかどうか
RectangleContainsScreenPointメソッドを使用します。
以下の例の場合、マウス座標が第1引数のRectTransformの範囲内にあるかどうかを判定します。
画像をドラッグできるかどうか判定する場合に使えそうです。
private void Update()
{
bool isInside = RectTransformUtility.RectangleContainsScreenPoint(
rectTransform,
Input.mousePosition,
Camera.main
);
}
軸に沿って反転させる
FlipLayoutOnAxisメソッドを使用します。
指定した軸にそってレイアウトを反転させます。
RectTransformUtility.FlipLayoutOnAxis(rectTransform, 0, false, false);
第二引数が
- 0なら水平方向
- 1なら垂直方向
に反転させます。
ピクセルを正しいポイントに変換する
UIのピクセルパーフェクトな描画のため、
PixelAdjustPointやPixelAdjustRectを使用して、微妙な位置やサイズの調整を行うことが出来ます。
Vector2 adjustedPoint = RectTransformUtility.PixelAdjustPoint(originalPoint, rectTransform, canvas);
各メソッドに渡すカメラについて
例の中でCamera.main を渡している箇所がありますが、
実際にはRectTransformが属するCanvasが使用しているカメラを渡してください。
CanvasのRenderModeが、
WorldSpaceの場合はEventCamera,
ScreenSpace-Cameraの場合はRenderCamera
に指定されているカメラを渡します。
ScreenSpace-Overlayの場合カメラを指定していないので、各メソッドにはnullを渡します。
private void Update()
{
bool isInside = RectTransformUtility.RectangleContainsScreenPoint(
rectTransform,
Input.mousePosition,
null
);
}
まとめ
RectTransformUtilityは、UIの座標変換やレイアウトの調整やヒットテストなど、
RectTransformを扱う際に非常に役立つ機能を提供します。
これらを使うことで、UI操作を便利に行うことが出来ます。
自前でスクリプトを書こうと思うとなかなか大変ですが、公式でユーティリティが用意されているので、
積極的に活用しましょう。
📣おしらせ!
Unity Asset Storeで
世界を揺るがすフラッシュセール
が開催中です。
最高のワールド制作に必要なすべてが、24時間限定で70% OFF!