当前位置: 首页 > news >正文

RectTransform的SetSizeWithCurrentAnchors和SetInsetAndSizeFromParentEdge说明 - 冷夜

在 Unity UI 开发中,SetSizeWithCurrentAnchors 和 SetInsetAndSizeFromParentEdge 是 RectTransform 提供的两个用于动态调整 UI 元素尺寸和位置的重要方法。它们的主要区别在于‌是否受锚点(Anchors)影响‌以及‌设置的参考系不同‌。

以下是详细说明:

1. SetSizeWithCurrentAnchors

‌核心功能‌:根据当前的锚点设置,将 RectTransform 在指定轴上的尺寸设置为目标值。

  • ‌方法签名‌:
    csharp
     
    public void SetSizeWithCurrentAnchors(RectTransform.Axis axis, float size);
  • ‌参数说明‌:
    • axis:指定要设置尺寸的轴,可选 RectTransform.Axis.Horizontal(宽度)或 RectTransform.Axis.Vertical(高度)。
    • size:期望的最终尺寸值。
  • ‌工作原理‌:
    • 该方法会‌考虑当前锚点的影响‌。它通过计算当前锚点所定义的“锚框”大小,反推出需要设置的 sizeDelta values,从而确保 UI 元素在视觉上呈现为你指定的 size
    • 如果锚点是拉伸状态(Stretch),父物体大小改变时,UI 元素的实际尺寸可能会随之变化。若希望保持固定尺寸,需确保锚点未拉伸,或在父物体大小改变后重新调用此方法。
  • ‌适用场景‌:
    • 当你希望直接设置 UI 元素的‌绝对宽度或高度‌,而不关心其相对于父物体边缘的具体距离时。
    • 例如:动态设置一个图片的宽度为 200 像素,无论其锚点是在中心还是左侧。

2. SetInsetAndSizeFromParentEdge

‌核心功能‌:设置 RectTransform 相对于父物体指定边缘的距离(Inset),并同时设置该方向上的尺寸。

  • ‌方法签名‌:
    csharp
     
    public void SetInsetAndSizeFromParentEdge(RectTransform.Edge edge, float inset, float size);
  • ‌参数说明‌:
    • edge:父物体的参考边缘,可选 LeftRightTopBottom
    • inset:UI 元素边缘与父物体指定边缘之间的距离。
    • size:UI 元素在该方向上的尺寸(如果是 Left/Right 则为宽度,Top/Bottom 则为高度)。
  • ‌工作原理‌:
    • 该方法会‌自动修改锚点(Anchors)‌。它会将锚点设置为与指定的父物体边缘对齐,并设置 anchoredPosition 和 sizeDelta 以满足距离和尺寸要求。
    • 它提供了一种类似 CSS 中 margin 或 padding 的布局方式,直接基于父物体边缘进行定位和 sizing。
  • ‌适用场景‌:
    • 当你需要让 UI 元素‌紧贴父物体的某一边‌,并保持固定间距和固定尺寸时。
    • 例如:创建一个距离父物体左边 10 像素、宽度为 100 像素的侧边栏。

对比总结

表格
特性SetSizeWithCurrentAnchorsSetInsetAndSizeFromParentEdge
‌参考系‌ 基于‌当前锚点‌ 基于‌父物体的指定边缘‌
‌是否修改锚点‌ ‌否‌,保持现有锚点不变 ‌是‌,会自动调整锚点对齐到指定边缘
‌主要用途‌ 设置‌绝对尺寸‌(宽/高) 设置‌相对位置+尺寸‌(距边距离+宽/高)
‌对 AnchoredPosition 影响‌ 间接影响(通过 sizeDelta 变化) 直接影响(重新计算 anchoredPosition)
‌典型用例‌ "把这个按钮宽度设为 200" "把这个面板放在距离顶部 50 像素处,高度为 300"

代码示例

using UnityEngine;public class RectTransformExample : MonoBehaviour
{public RectTransform myRect;void Start(){// 示例 1: 设置宽度为 200,保持当前锚点不变// 无论锚点在哪里,视觉宽度都会尝试调整为 200myRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 200f);// 示例 2: 设置距离父物体左边 10 像素,宽度为 100 像素// 这会将锚点设置为左侧对齐,并调整位置和大小myRect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 10f, 100f);// 示例 3: 设置距离父物体顶部 5 像素,高度为 50 像素myRect.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 5f, 50f);}
}

  

注意事项

  1. ‌锚点冲突‌:SetInsetAndSizeFromParentEdge 会强制改变锚点,如果你后续依赖特定的锚点布局逻辑,需注意这一点。
  2. ‌性能‌:这两个方法都会触发 Layout 重建,频繁调用可能影响性能,建议在必要时使用。
  3. ‌只读属性‌:不要直接修改 rect 属性,它是只读的。应使用上述方法或修改 sizeDeltaanchoredPosition 等属性。
http://www.jsqmd.com/news/783171/

相关文章:

  • 图神经网络在优化算法选择中的应用:自动推荐分解方法
  • 百度网盘提取码智能解析:3分钟告别手动搜索的终极指南
  • 视频动作识别可解释性:REVEX框架与六种移除式解释方法评测
  • AI安全实战:从机器学习模型选型到生产环境集成部署
  • 基于语义网与决策树的肝病诊断决策支持系统构建实践
  • ISO 27001认证不是终点:每年内审如何真正推动数据安全改进?
  • CANN/pto-isa非ISA运算规范
  • 2026年成都水刀配件一站式采购指南:力好机械与主流品牌深度对标 - 企业名录优选推荐
  • 荆州全城正规上门回收黄金 两区三市三县全覆盖 资质齐全交易放心 - 金掌柜黄金回收
  • 推荐几家国内知名的Ansys代理商 - 品牌2026
  • Ansys哪家代理商价格比较低 - 品牌2026
  • CANN图像处理算子库
  • 大模型训练与数据
  • 3分钟让Windows任务栏变透明:TranslucentTB完全使用指南
  • 可解释AI实战:从LIME、SHAP到反事实解释的技术演进与应用
  • 苏州蔷薇吊装搬运:口碑好的苏州设备搬运公司推荐哪几家 - LYL仔仔
  • 自贡房屋装修预算超支?看看这份2026年全屋定制整装对比评测 - 优质企业观察收录
  • CANN/ops-math ReplicationPad3d算子
  • cann/ops-cv非连续Tensor说明
  • CANN/pypto浮点数取模运算API文档
  • CANN/atvoss默认块配置说明
  • 结构型设计模式——桥接模式
  • 公平AI与领域知识融合:构建可解释的酒驾风险预测模型
  • 2026年成都水刀配件市场深度横评:力好机械一站式供应解决方案 - 企业名录优选推荐
  • CANN算子基础框架库
  • cherry Studio中配置openClaw教程
  • C 语言11 函数传参与递归
  • CANN元数据定义FrameworkType
  • 全域旅游打破资源壁垒,巨有科技一机游赋能区域文旅高质量发展
  • 语义通信赋能AIGC:基于ControlNet的高效可控图像生成框架解析