You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity脚本中修改Rect Transform的宽高?

解决RectTransform修改宽高无效的问题

原因分析

sizeDelta的实际作用完全由RectTransform的**锚点(Anchors)**和锚点参考框设置决定:

  • 当锚点是单个固定点(四个锚值完全相同,比如都设为0.5,0.5),sizeDelta直接对应RectTransform的实际宽高。
  • 当锚点处于拉伸状态(比如左=0、右=1,或上=1、下=0),sizeDelta代表的是矩形超出/缩进锚点参考框的偏移量,此时修改它不会直接改变视觉上的宽高。

解决方案

1. 使用SetSizeWithCurrentAnchors方法(推荐)

无论锚点如何设置,这个方法都能直接设置目标宽高:

RectTransform rt = canvas.GetComponent<RectTransform>();
// 分别设置水平和垂直方向的尺寸
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 700);
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 500);

2. 固定锚点后修改sizeDelta

如果UI不需要自适应父物体,可先将锚点设为单个固定点,再修改sizeDelta:

RectTransform rt = canvas.GetComponent<RectTransform>();
// 将锚点统一设为中心位置
rt.anchorMin = new Vector2(0.5f, 0.5f);
rt.anchorMax = new Vector2(0.5f, 0.5f);
// 此时sizeDelta对应实际宽高
rt.sizeDelta = new Vector2(700, 500);
// 可选:重置轴心和锚点位置,避免偏移
rt.pivot = new Vector2(0.5f, 0.5f);
rt.anchoredPosition = Vector2.zero;

3. 直接修改rect.size

rect属性直接对应视觉上的矩形尺寸,但修改后会影响锚点相关参数,仅适合锚点固定的场景:

RectTransform rt = canvas.GetComponent<RectTransform>();
rt.rect = new Rect(rt.rect.position, new Vector2(700, 500));

额外检查项

  • 确认目标UI对象没有被Layout Group组件(如Horizontal Layout Group、Vertical Layout Group)控制,这类组件会自动覆盖RectTransform的宽高设置,需先禁用或调整布局参数。
  • 验证获取的RectTransform是目标对象的(比如是否误取到了父物体的组件)。

内容的提问来源于stack exchange,提问作者Max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:35:49