简介


RectTransform组件继承自Transform, 它控制UI对象的位置,尺寸,旋转和坐标系原点等信息。
除了Canvas外,每个带有RectTransform组件的对象并不能单独存在,必须是另一个带有RectTransform组件对象的子节点。
这也能说明为什么当我们创建一个UI对象的时候,Unity会自动为我们创建一个Canvas对象,并且将该对象至于Canvas的子节点。

Anchors

Anchors是UI对象在其父节点矩形区域的锚心位置,它由两个值组成,anchorMin和anchorMax。

anchorMin和anchorMax是一个Vector2类型的变量,x,y 的取值在0-1之间,对应于所在点位置占据父节点区域的对应轴向上的百分比。那么父节点的左下角就是Vector2(0,0), 右上角则为(1,1)。

当我们设置anchorMin和anchorMax的值的时候,将会出现以下几种情形。

  1. anchorMin == anchorMax


    当锚心位置重合,可设置属性如上图。锚心点重合又称作绝对布局,即UI对象的大小并不受父节点的影响,保持不变。位置信息则是 Pivot 与 锚心位置的 向量差。

  2. anchorMin.x == anchorMax.x && anchorMin.y !=c anchorMax.y


    x点重合,y点不重合,可见y轴上有一定的距离差,那么我们可以设置PosX与锚心点的距离差,但是PosY将变成与父节点上下边的距离,当父节点的高度发生变化,子节点将始终保持与父节点的上下边框的距离。

  3. anchorMin.x != anchorMax.x && anchorMin.y == anchorMax.y


    x点不重合,y点重合,可见x轴上有一定的距离差,那么我们可以设置PosY与锚心点的距离差,但是PosX将变成与父节点左右边的距离,当父节点的宽度发生变化,子节点将始终保持与父节点的左右边框的距离。

  4. anchorMin.x != anchorMax.x && anchorMin.y != anchorMax.y


    当x,y 均不相等,那么锚心点将形成一个矩形框,我们设置的是每条边到对应锚框的边的距离。

当锚心点重合,我们称之为绝对布局,当锚心点不相等时,则形成了相对布局,通过以上对anchor的分析,我们也能理解,为什么我们的RectTransform组件需要依赖于父对象的RectTransform组件。

Pivot


pivot 是节点自身的坐标系原点位置,Vector2 类型,取值为0-1,表示自身对应轴向上的百分比。
在绝对布局下,PosX和PosY的值就是Pivot到锚点的值。

Offset


OffsetMax: 矩形框右上角坐标 - AnchorMax所在坐标
OffsetMin: 矩形框左下角坐标 - AnchorMin所在坐标

在锚框的情况下我们可以在代码里面动态的去调整UI元素相对边界的距离,其次更重要的是,利用这这两个值就可以计算出sizeDelta的值

sizeDelta

sizeDelta = OffsetMax - OffsetMin

  1. 在锚点情况下,offsetMax和offsetMin的起点相同,根据向量相减的三角形法则可以得到一个新的向量,这个新的向量的X和Y的大小正好UI元素的宽和高相等,所以在这个时候去设置sizeDelta的值,可以直接调整UI元素的大小
  2. 在锚框的情况下,offstMax减去offsetMin,得到的将不再是UI元素的大小这个向量代表的物理意义是,sizeDelta.x值就是UI元素的宽度与的锚框宽度的差值,sizeDelta.y的值就是UI元素的的高度与的锚框高度的差值(sizeDelta.x:UI宽度 - 锚框宽度;sizeDelta.y:UI高度 - 锚框高度)

anchoredPosition

通过直接设置anchoredPosition的值可以改变UI元素的位置,但也是要分锚点和锚框的情况。

  1. 在使用锚点的情况下,anchoredPosition表征的是元素Pivot到Anchor的距离
  2. 在使用锚框的情况下,anchoredPosition表征的是元素Pivot到锚框中心点的距离

rect

在本地坐标系中对象的矩形框。
width: UI的框
height: UI的高
x: 左下角.x相对于Pivot.x 的距离
y: 左下角.y相对于Pivot.y 的距离

方法简介

SetSizeWithCurrentAnchors(Axis axis, float size);

这个方法无论在绝对布局还是相对布局的情况下,都可以通过直接设置rect中的width和height值来改变UI元素的大小。

     public RectTransform rt;// Start is called before the first frame updatevoid Start(){rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 50);rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 50);}

SetInsetAndSizeFromParentEdge(Edge edge, float inset, float size);

可以根据父物体的Edge(某一边)去布局。其中第一个参数就是用于确定基准的边,第二个参数是UI元素的该边界与父物体该边界的距离,第三个元素是设定选定轴上UI元素的大小

首先以右边界为基准

private RectTransform rectTransform;
// Use this for initialization
void Start()
{rectTransform = GetComponent<RectTransform>();rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 200, 400);//这种情况下我选定父物体的右边界为基准,结果如下图
}


然后以下边界为基准

 private RectTransform rectTransform;
// Use this for initialization
void Start()
{rectTransform = GetComponent<RectTransform>();//rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 200, 400);rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 200, 400);
}


在使用这个方法的时候要注意锚点也会改变,改变的规则为

  • 以左边界为基准时,anchorMin和anchorMax 的y不变x变为0.
  • 以右边界为基准时,anchorMin和anchorMax 的y不变x变为1.
  • 以上边界为基准时,anchorMin和anchorMax 的x不变y变为1.
  • 以下边界为基准时,anchorMin和anchorMax 的x不变y变为0.

GetWorldCorners(Vector3[] fourCornersArray)

可以取得UI元素四个角的世界坐标,具体使用方法,先建立一个长度为4的vector3数组,然后传进这个方法,调用一次后,数组被赋值,里面的四个元素分别是UI的左下角 ,左上角,右上角,右下角。

  private RectTransform rectTransform;// Use this for initializationvoid Start(){rectTransform = GetComponent<RectTransform>();Vector3[] corners = new Vector3[4];rectTransform.GetWorldCorners(corners);foreach (Vector3 corner in corners)Debug.LogWarning(corner);}

文章引用地址

RectTransform详解相关推荐

  1. Unity——RectTransform详解

    Unity--RectTransform详解 目录 1.Anchor(Min,Max) 2.绝对与相对布局 3.Pivot 4.Offset(Min,Max) 5.SizeDelta 6.rect 7 ...

  2. Unity进阶技巧 - RectTransform详解

    一.Pivot属性详解 首先为了让大家更好的理解内容,我在Unity中创建了两个UI控件,一个Plane控件,作为父对象,一个Image控件,作为子对象. 然后我们选中子对象,来看看它的RectTra ...

  3. Unity:锚点详解

    锚点时基于父对象让子对象定位用的.所以我们移动锚点时候的范围就是父对象的宽和高. 锚点在一起时 这四个三角形在一起时意味着锚点在一起 当锚点在一起的时候,图片的大小不会随着父对象的大小改变而改变:图片 ...

  4. Unity 之 UGUI RectTransform矩形变换组件详解

    Unity 之 UGUI RectTransform矩形变换组件详解 1,属性面板 2,详细信息 3,代码操作 4,使用实例 4.1 传说中的自适应 4.2 锚点的另一种使用方式: 4.3 蓝图和原始 ...

  5. DoTween的使用与详解

    DOTween路径动画详解与使用 转载请注明出处 DOTween插件一般与UGUI结合使用 DoTween的运动方式 1.DOTween.To()方法 对变量做一个动画,通过插值的方式修改一个值的变化 ...

  6. Unity 3D 菜单栏快捷键详解

    nity 3D菜单栏及快捷键详解 File 菜单 Edit 菜单 Assets 菜单 GameObject 菜单 Component 菜单 Window 菜单 Help 菜单 其他快捷键 Unity ...

  7. 零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏

    零基础入门 Unity 之 UGUI 详解专栏 | 寻找C站宝藏 六大推荐理由 理由一:系统 理由二:详细 理由三:专业 理由四:图解 理由五:深度 理由六:实例 一键直达:<UGUI 控件详解 ...

  8. Unity快速入门之二 GUI Transform 详解

    Unity快速入门之一 3D基础概念.Camera.Canvas RenderMode的几种方式对比_翕翕堂 Unity快速入门之二 GUI Transform 详解_翕翕堂 Unity快速入门之三 ...

  9. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

最新文章

  1. python笔记6--编码
  2. SQL Server数据库表锁定原理以及如何解除表的锁定转
  3. 小新pro13睡眠后无法唤醒_轻薄的外表狂野的心——联想小新 Pro13 测评
  4. asp.net ReportViewer 设置 rdlc textbox的值
  5. 【转】freetextbox的ToolBarLayout属性设置
  6. asp.net core-5.控制台读取json文件
  7. 礼遇双十二,送12份福利好事成双
  8. BOOTP 与 DHCP
  9. Mybatis-Dao层开发之Mapper接口
  10. Atitit 研发团队建设----福利法案--非物质福利与物质福利法案
  11. spring 的3种常用的注入方式
  12. 解决安装vc2005运行库时提示Command line option syntax error.Type Command/?for Help
  13. 计算机硬盘哒哒响,教你轻松解决硬盘异响(咔咔或者嗒嗒声)
  14. android word文件编辑器,AndroDOC Doc&Word的编辑器
  15. 解决 npm i 时出现npm ERRcode EINTEGRITY npm ERR sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+I
  16. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day30】—— 设计模式1
  17. Android 手把手教你实现百度身份证识别
  18. CH340G的RTS#和DTR#引脚输出
  19. tushare pro 版本获取股票历史数据
  20. 9.9的阿里巴巴编码规范考试竟如此简单?搜集试题分享!让我们一起守护开发规范!

热门文章

  1. 【Android App】实战项目之仿微信的视频通话(附源码和演示 超详细必看)
  2. midi接口 stm32_ALIENTEK MiniSTM32读取midi文件数据出错
  3. 周志华《Machine Learning》学习笔记(12)--降维与度量学习
  4. led驱动程序_点亮led(imx6ull)
  5. STC12C5410AD单片机PCA应用图文详解
  6. 2GHz的德州仪器OMAP4460双核处理器
  7. vw vh vm
  8. “流量水果”——牛油果的营销骗局
  9. xp计算机时间与网络时间不一致,XP系统时间总是不准确的原因及解决方法
  10. 可选int参数“id”存在,但由于被声明为基元类型,因此无法转换为null值。考虑将其声明为对应的基元类型的对象包装器。