Unity

[Unity] RectTransformで特定方向にStretchしているかをスクリプト上で判定する

More than 1 year has passed since last update.

RectTranformにおけるStretch状態

X軸に対するStretch

  • 横幅は親の横幅に依存して引き伸ばされる
  • PosXが指定出来なくなる代わりに、Right/Leftにマージンを指定可能になる
  • AnchorsのXの値が Min:0 / Max:1 になる
  • AnchorPresetsは以下のような状態になる (X軸が↔表示)

stretchx.png

Y軸に対するStretch

  • 縦幅は親の縦幅に依存して引き伸ばされる
  • PosYが指定出来なくなる代わりに、Top/Bottomにマージンを指定可能になる
  • AnchorsのYの値が Min:0 / Max:1 になる
  • AnchorPresetsは以下のような状態になる (Y軸が↔表示)

stretchy.png

XY軸に対するStretch

  • 横幅、縦幅共に親に依存して引き伸ばされる
  • AnchorsのX/Yの両値が Min:0 / Max:1 になる
  • AnchorPresetsは以下のような状態になる (XY軸が↔表示)

stretchxy.png

Stretch状態の判定処理

RectTransformOffsetChecker
using UnityEngine;

[RequireComponent(typeof(RectTransform))]
public class RectTransformOffsetChecker : MonoBehaviour
{
    void Start()
    {
        var rectTransform = this.GetComponent<RectTransform>();
        Debug.Log("anchorMin" + rectTransform.anchorMin);
        Debug.Log("anchorMax" + rectTransform.anchorMax);
    }
}

image

RectTransformを拡張して判定を行えるようにする

RectTransformExtension
using UnityEngine;

public static class RectTransformExtension
{
    public static bool IsStretchedX(this RectTransform rectTransform)
    {
        return rectTransform.anchorMin.x == 0 && rectTransform.anchorMax.x == 1;
    }

    public static bool IsStretchedY(this RectTransform rectTransform)
    {
        return rectTransform.anchorMin.y == 0 && rectTransform.anchorMax.y == 1;
    }

    public static bool IsStretchedXY(this RectTransform rectTransform)
    {
        return rectTransform.IsStretchedX() && rectTransform.IsStretchedY();
    }
}
RectTransformOffsetChecker
using UnityEngine;

[RequireComponent(typeof(RectTransform))]
public class RectTransformOffsetChecker : MonoBehaviour
{
    void Start()
    {
        var rectTransform = this.GetComponent<RectTransform>();
        Debug.Log("IsStretchedX" + rectTransform.IsStretchedX());
        Debug.Log("IsStretchedY" + rectTransform.IsStretchedY());
        Debug.Log("IsStretchedXY" + rectTransform.IsStretchedXY());
    }
}

image