🗿

Unity2DにおけるAnchor

2022/02/03に公開

UnityGUI(2D)での、オブジェクトの配置について整理します。親と子のオブジェクトの位置によって入力するパラメータ(PosX,PosYなど)が異なっており、混乱してしまったのが理由です。

ここでは、Canvas上にPanelを配置した場合に使用される各パラメータ値を整理しています。Canvasを親オブジェクト、Panelはその子オブジェクトとします。

前提

親と子の位置関係を表すのに、UnityではAnchorという概念を使用しています。Anchorとは、親オブジェクトの大きさに対する割合を用いて入力される値であり、子オブジェクトはこのAnchorを基準に配置されます。

用語
用語 定義
Anchor 子の配置の基準点。親の大きさ変更に連動する。親の縦横の割合値。
Pivot 子の拡大・縮小・回転時の基準点。子の縦横の割合値
Pos X,Y 子のAnchorからのXY距離
Width,Height 子の幅と高さ

PosX,Yは距離ですが、AnchorとPivotは0から1の割合です。すべて負の数も入力可能です。

Anchorの基本

Anchorとは子オブジェクトを配置する際の基準点です。Unityでは、4点のAnchorとUIObjectの4隅の4点の距離が一定に保つように計算しています。Anchorは親オブジェクトのサイズの割合値で、4点存在し、必ず矩形です。親オブジェクトサイズ変更時や解像度が異なる場合、レイアウトが崩れないようにするための機能です。

子の配置パラメータ

Anchorは4点存在しますが、Anchorの位置によってPosXY、Height、Widthのパラメータの扱いが変化します。以下の4つで分類します。

  1. 1点の場合。4点すべてが同一座標の場合。
  2. 2点の場合(Xが同一)。4点のX座標が同一でY座標が異なる場合。
  3. 2点の場合(Yが同一)。4点のY座標が同一でX座標が異なる場合。
  4. 4点の場合。4点すべての座標が異なる場合

AnchorPresetsでの対応を図示します。

順に整理します。

Anchorが1点の場合


子オブジェクトの4隅はこの1つのAnchorを基準とします。PosXとPosYは、PivotのAnchorの位置からの距離です。Pivotは子オブジェクトの矩形の左下隅を基準とした割合値です。HeightとWidthで矩形の大きさです。

Anchorが2点の場合(Xが同一)



子オブジェクトの4隅はX座標が同一の2つのAnchorを基準とします。PosXは、PivotのAnchorの位置からのX方向の距離です。
PosYとHeightは存在しません。代わりにAnchorからの距離としてTopとBottomが追加されています。

Anchorが2点の場合(Yが同一)



子オブジェクトの4隅はY座標が同一の2つのAnchorを基準とします。PosY は、PivotのAnchorの位置からのY方向の距離です。
PosXとWidthは存在しません。代わりにAnchorからの距離としてLeftとRightが追加されています。

Anchorが4点の場合



子オブジェクトの4隅はそれぞれ4つのAnchorを基準とします。
PosYとPosXは存在しません。代わりにAnchorからの距離としてTop、Bottom。Left、Rightの4つが追加されています。

以上です。

Discussion