UI_1_RectTransform
RectTransform
RectTransform は、UI 要素の位置、サイズ、回転 を制御するために使用される Unity のコンポーネントです。通常の Transform コンポーネントは 3D オブジェクトに使用されますが、RectTransform は UI 要素(例えば、ボタン、画像、テキストなど)に使用され、UI のレイアウトに特化しています。
RectTransform の主なプロパティ
| プロパティ名 | 型 | 説明 | 使用例 |
|---|---|---|---|
anchoredPosition | Vector2 | 親 RectTransform に対するローカル位置を設定または取得。 | rectTransform.anchoredPosition = new Vector2(100, 200); |
sizeDelta | Vector2 | RectTransform の幅と高さを設定または取得。 | rectTransform.sizeDelta = new Vector2(200, 100); |
anchorMin | Vector2 | RectTransform の左下隅のアンカーを指定。0,0 が親の左下、1,1 が親の右上。 | rectTransform.anchorMin = new Vector2(0, 0); |
anchorMax | Vector2 | RectTransform の右上隅のアンカーを指定。 | rectTransform.anchorMax = new Vector2(1, 1); |
pivot | Vector2 | RectTransform の基準点を設定。0,0 が左下隅、1,1 が右上隅。 | rectTransform.pivot = new Vector2(0.5f, 0.5f); |
rotation | Quaternion | RectTransform の回転を設定または取得。 | rectTransform.rotation = Quaternion.Euler(0, 0, 45); |
スクリーンポジション(Screen Position)について
スクリーンポジションは、ワールド空間の座標をスクリーン(画面上)の座標に変換したものです。UI 要素は通常、スクリーン座標系(ピクセル単位)で配置されますが、ゲームオブジェクトや 3D オブジェクトはワールド座標系で位置を持っています。これを Unity の Camera クラスを使って変換します。
- ワールド座標: ゲームオブジェクトがシーン内で持っている位置。
- スクリーン座標: ゲームオブジェクトが画面上でどこに描画されるかを決定する座標。
Camera.WorldToScreenPoint と Camera.ScreenToWorldPoint
WorldToScreenPoint: ワールド座標をスクリーン座標に変換します。ScreenToWorldPoint: スクリーン座標をワールド座標に変換します。
これらを使うことで、例えばワールド内のキャラクターの位置を画面上に表示するUI(例えば、HPバー)に変換することができます。
使い方の例
1. RectTransform を使った UI の位置調整
以下のコードは、RectTransform を使って UI 要素(例えばボタン)を画面上で特定の位置に配置する方法です。
using UnityEngine;
public class UIPositioning : MonoBehaviour
{
public RectTransform rectTransform;
void Start()
{
// RectTransform の位置を (100, 200) に設定
rectTransform.anchoredPosition = new Vector2(100, 200);
// サイズを変更
rectTransform.sizeDelta = new Vector2(200, 100);
// アンカーを画面の左下に設定
rectTransform.anchorMin = new Vector2(0, 0);
rectTransform.anchorMax = new Vector2(0, 0);
}
}
上記のコードでは、rectTransform の位置を (100, 200) に設定し、サイズを 200x100 に変更しています。アンカーは左下隅に設定されています。
2. ワールド座標 からスクリーン座標への変換
次に、ワールド座標をスクリーン座標に変換する方法を見てみましょう。例えば、ゲームオブジェクトの位置を画面上の位置に変換して表示する場合です。
using UnityEngine;
public class WorldToScreenExample : MonoBehaviour
{
public Camera mainCamera;
void Update()
{
// ゲームオブジェクトのワールド座標をスクリーン座標に変換
Vector3 screenPos = mainCamera.WorldToScreenPoint(transform.position);
// スクリーン座標をコンソールに表示
Debug.Log("スクリーン座標: " + screenPos);
}
}
このコードでは、ゲームオブジェクト(transform.position)の位置をスクリーン座標に変換し、コンソールにその位置を表示しています。これにより、ゲームオブジェクトが画面上のどこに描画されるかを知ることができます。