LoginSignup
2
2

More than 3 years have passed since last update.

【Unity】スクリプトからRectTransformをStretchにする

Last updated at Posted at 2021-03-26

概要

image.png
スクリプトから↑の状態にする方法について、エディタ拡張を書いているときに詰まったので備忘録として残します。

結論

残念ながらRectTransform.isStretch=trueのようには設定できないので、以下のようにコードでAnchorを設定します。

// 縦横Stretch
RectTransform rectTransform = (RectTransform)target.transform;
rectTransform.anchorMin = new Vector2(0, 0);
rectTransform.anchorMax = new Vector2(1, 1);

// 親オブジェクトにStretchするようにサイズを変更
rectTransform.offsetMin = new Vector2(0, 0);
rectTransform.offsetMax = new Vector2(0, 0);

解説

コードとInspectorの対応は以下のようになっています。
image.png

Inspector コード
Left offsetMin.x
Right -offsetMax.x
Top -offsetMax.y
Bottom offsetMin.y
  • anchorMin, anchorMaxのx軸, y軸について、0, 1になっている軸がStretchになる
  • offsetMax(Right, Top)はコードとInspectorの符号が反転する

おまけ

Hierarchyビューで右クリックからStretchなTextを子オブジェクトに作るサンプル


/// <summary>
/// TextMeshProを子に作成(Stretch)
/// </summary>
[UnityEditor.MenuItem("GameObject/Test/Stretched Text", false, 0)]
public static void CreateStretchText()
{
    var obj = UnityEditor.Selection.activeGameObject;
    if (obj == null)
        return;

    var target = new GameObject("Text (TMP)", typeof(TMPro.TextMeshProUGUI));
    var txt = target.GetComponent<TMPro.TextMeshProUGUI>().text = "New Text";
    target.transform.SetParent(obj.transform);

    // 縦横Stretch
    RectTransform rectTransform = (RectTransform)target.transform;
    rectTransform.anchorMin = new Vector2(0, 0);
    rectTransform.anchorMax = new Vector2(1, 1);

    // 親オブジェクトにStretchするようにサイズを変更
    rectTransform.offsetMin = new Vector2(0, 0);
    rectTransform.offsetMax = new Vector2(0, 0);
}

image.png

2
2
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
2