2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

'Screen Space - Overlay'なCanvasでのRectTransform (Unity uGUI)

Posted at

前提

検証環境
  • Unity 2019.4.x (LTS)

概念

スクリーンショット 2020-12-07 123044.png

  • 青色のTargrtオブジェクトに着目します。
    • RectTransformは、Transformの派生クラスです。
      • MonoBehaviorを継承したクラスがRectTransformを持つなら、(RectTransform) transformあるいはtransform as RectTransformで、RectTransformにアクセスできます。
        • RectTransformがない場合、キャストは例外を発生し、asnullを返します。
        • 例外が発生しなければキャストの方が高速です。
    • ワールド座標系
      • Screen Space - OverlayCanvasでのワールド座標系は、スクリーン座標系に一致します。
    • ローカル座標系
      • Transformは、親のローカル座標系で配置されます。
      • RectTransform.rectは自身のローカル座標系で示されます。
      • RectTransformのメンバーはローカル座標系に依存しているので、スケールの影響を受けます。
        • rectsizeDeltaなどからワールド/スクリーン座標系の実サイズを得るためには、lossyScaleを適用する必要があります。
    • 正規化座標系
      • 基準とする矩形の左下を(0.0,0.0)、右上を(1.0,1.0)とする座標系です。
      • 負数や1.0を超える値も有効で、矩形の外が表現できます。
    • parent
      • 赤色の矩形は、ヒエラルキーで親になるParentオブジェクトのrectです。
      • 個々のオブジェクトは、親の影響下で、自身のローカルな系を持ちます。
    • anchor
      • 図中の、白い楔形が指し示す4点です。
        • 4点が全て一致して1点となる場合や、2点ずつ一致して2点となる場合もあります。
      • オブジェクトは、これらの箇所で親に癒着していて、親のrectの変化に追従します。
      • 親のrectを基準として正規化された座標系で、左下anchorMinと右上anchorMaxの位置が規定されます。
    • pivot
      • 図中の、青いドーナッツ型の中心点です。
      • 自身のローカル座標の原点で、オブジェクトの位置を代表します。さらに、回転軸でもあります。
      • 自身のrectを基準として正規化された座標系で位置が規定されます。
    • rect
      • 図中の、青丸の角と白線で示されている矩形領域です。
      • オブジェクトの領域を表します。
      • anchorMinから左下角へのオフセットoffsetMinと、anchorMaxから右上角へのオフセットoffsetMaxとして規定されます。
    • scale
      • 親に対する相対的な拡大率です。
      • ワールドに対しては、ヒエラルキーのルートから積算されたスケールを持つことになります。
    • rotation
      • 親に対する相対的な回転角です。
      • ワールドに対しては、ヒエラルキーのルートから加算された回転角を持つことになります。

変数

RectTransform 意味 規格
anchoredPosition pivotの位置$^{※}$ anchorからの変位 Vector2
anchoredPosition3D pivotの位置$^{※}$ anchorからの変位 Vector3
pivot pivotの位置 rectの正規化座標系 Vector2
anchorMax anchorの右上位置 親のrectの正規化座標系 Vector2
anchorMin anchorの左下位置 親のrectの正規化座標系 Vector2
offsetMax rect右上角の位置 anchorMaxからの変位 Vector2
offsetMin rect左下角の位置 anchorMinからの変位 Vector2
rect rectの位置とサイズ 自身のローカル座標系 Rect
sizeDelta rectのサイズ anchorとのサイズ差 Vector2
Transformから継承 説明 規格
localEulerAngles 回転角度 親のローカル座標系 float
localRotation 回転四元数 親のローカル座標系 Quaternion
localPosition pivotの位置 親のローカル座標系 Vector3
localScale 拡大率 親のローカル座標系 Vector3
eulerAngles 回転角度 ワールド座標系 float
rotation 回転四元数 ワールド座標系 Quaternion
position pivotの位置 ワールド座標系 Vector3
lossyScale 拡大率 ワールド座標系、読み取り専用 Vector3

※anchorからの変位によるpivotの位置

  • anchoredPositionは、anchorMinanchorMaxが一致しない(つまりanchorが一点でない)場合は、pivotの位置を示せなくなる可能性があります。
    • 例えば、親がrect=(0,0,200,200)で、対象がanchorMin=(0.5,0.5)anchorMax=(1,1),sizeDelta=(0,0)のとき、pivotを何処に移動してもanchoredPosition(0,0)のまま変化しません。(ただし、計算精度による微少変動を除きます。)

Public 関数

RectTransform 説明
ForceUpdateRectTransforms 強制的に内部データを再計算します。
GetLocalCorners rectの頂点座標を自身のローカル座標系で取得します。
GetWorldCorners rectの頂点座標を自身のワールド座標系で取得します。
SetInsetAndSizeFromParentEdge 親のrectの一辺からの距離とサイズでrectの一軸を設定します。
SetSizeWithCurrentAnchors rectの一軸のサイズを設定します。

GetLocalCorners

public void GetLocalCorners (Vector3 [4] corners);

  • 四頂点を格納可能な配列を渡して矩形の座標を得ます。

SetInsetAndSizeFromParentEdge

public void SetInsetAndSizeFromParentEdge (RectTransform.Edge edge, float inset, float size);

  • 一回のコールで、矩形の一軸の領域を設定します。
    • pivotの値を満たすように、領域が展開されます。
    • 矩形を定めるためには、軸を変えて二回コールしなければなりません。
    • 同じ軸に属する対辺で二回目をコールすると上書きされます。
  • edge
    • RectTransform.Edge.BottomLeftRightTop
    • 親の矩形の四辺から一つを選択します。
  • inset
    • 領域の開始ポイントです。
  • size
    • inset + sizeが、領域の終了ポイントです。

SetSizeWithCurrentAnchors

public void SetSizeWithCurrentAnchors (RectTransform.Axis axis, float size);

  • 一回のコールで、矩形の一軸のサイズを設定します。
    • pivotの値を満たすように、領域が展開されます。
    • 矩形を定めるためには、軸を変えて二回コールしなければなりません。
  • axis
    • RectTransform.Axis.HorizontalVertical
    • 軸を選びます。
  • size
    • 軸の領域サイズです。

エディタの挙動

  • ツールバー
    • Pivot/Center
      • 選択によって、Sceneウインドウで回転させる際の中心軸が変わります。
      • pivotrect中央にないときにCenterを選んでシーン・ウインドウで回転させると、rotation以外のメンバーも変化します。
  • インスペクター
    • anchorMinanchorMaxが一点で一致する場合は、(posX,Width)(posY,Height)を編集可能です。
    • anchorMinanchorMaxが一致しない軸においては、(Left,Right)あるいは(Top,Bottom)が編集可能です。
    • RightanchorMax.xから、TopanchorMax.yからの、負のオフセットです。
    • LeftanchorMin.xから、BottomanchorMin.yからの、正のオフセットです。

CanvasScaler

  • CanvasScalerCanvasと共にアタッチされているRectTransformlocalScaleは、Canvas.scaleFactorと同じ値を示します。
    • 子孫のRectTransformはその影響下にあり、そのlossyScaleは、Canvasまで順に親を辿ってlocalScaleを積算したものに一致します。
  • つまり、CanvasScalerによるスケーリングは、RectTransform.localScaleを制御しているだけなので、単なるRectTransformの挙動として捉えることができます。
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?