localPosition和anchoredPosition、offsetMin和offsetMax、SizeDelta
有时候会发现transform.DoMoveX,.DoLocalMoveX,.DoMove,.DoLocalMove等方法时效果不对
假设原来transform的坐标为(0,0,0)
写入
transform.DOLocalMoveY(180,1);
那么按照正常来说,Y应该是180
但是实际运行发现,transform的坐标为(0,300,0)
这就是一个坑了,这是在transfrom.localPosition 不等于rectTransform.anchoredPosition的情况下导致的,
可以在DeBug面板看得到
localPosition为自身矩形中心点(Pivot)与其父节点矩形中心点(Pivot)的相对位置坐标,与自身锚点(Anchors)无关。
anchoredPosition为矩形中心点(Pivot)与与锚点中心点之间的相对坐标,与父节点无关。
下面黄圈就是父节点的中心点,右侧叉是子物体的锚点
可以看到localPosition就是,子节点的中心点相对于父节点的中心点的位置(25,50)
anchoredPosition就是,子节点的中心点相对于自己的锚点的位置(-25,0,0)
看下图
注意不开DeBug就是默认显示的是AnchorPosition
2D
anchor
当对RectTransform进行定位、旋转和缩放操作、长宽的增加 时,都将以Pivot为参考点进行。
关于UI RectTransform的,位置分为三种
1、Position
这个就是世界位置
可以通过transform.position.x掉出来
我比较喜欢用来配合DoMove做移动
tempTransPos为要移动的物体
tempWildTransList为要移动到的目的地
tempTransPos:DOMove(tempWildTransList[index].position,time,false)
2、anchoredPosition
对于Ui 首先在inspector面板上看到的是anchoredPosition而不是localPosition
(父节点和Piovt点和子节点的Pivot点重合的话,而且子节点的anchor点和自己的Pivot点重合的话,anchoredPosition和localPosition是一样的)
因为anchoredPosition是自身的anchor点相对于自己的Pivot点的相对位置
localPosition是自己的Pivot点相对于父物体的Pivot点的相对位置
所以 如果自身的anchor点 = 父物体的anchor点 = 自己的Pivot点
那么anchoredPosition和localPosition铁定一样
对于3d物体,因为不存在anchoredPosition所以inspector面板上看到的是localPosition
anchoredPosition为矩形中心点(Pivot)与与自己锚点中心点之间的相对坐标,与父节点无关,Pivot在锚点右上角为双正
锚点重合的情况
在锚点全部重合的情况下,PosX、PosY和PosZ确定了它的Pivot相对于Anchor的位置,Width和Height确定了它的尺寸。
右侧(0,0,0)
下面这种,将这个中心点放到右上角,那么anchoredPosition的位置就是(25,25,0),
锚点四个点不重合的情况
锚点的四部分,不重合的时候就会出现Left、Top、Right、Bottom四种,分别代表
上锚点与上边界的距离
下锚点与下边界的距离
左锚点与左上边界的距离
右锚点与右边界的距离
注意锚点在边界点外面为正
可以这么理解,
这四个锚点与四个角的距离固定了,锁死了,可以理解成绑定了4个钢丝绳,
如果他的父物体。红色的大小变了,那么
可以看到与四个边(角)的距离是没有变的,就是钢丝绳仍然不会变,变的是内部蓝色的大小半重合状态
可以看到有Y坐标和高度的,这个两个值在父物体形变的时候,也不会变的,当锚点的上下重合的时候,那么top和button就会转变成posy。因为顶和底原本是上下边界与上下锚点分别的距离,这个时候上下锚点位于同一点,那么完全可以用一个值就可以表示物体的y轴所在位置了,这个位置用锚点与中心点直接的y轴距离表示
另一侧的重合同理
总结就是无论如何,都可以理解成锚点和四个角的固定长度不变,无论怎么拉动。注意一点就是就是下面的这种,锚点的位置与父物体的边界是相对比例的位置,而不是固定位置,所以红色物体放大,下面的白色也会放大,但是白色物体的四个角与锚点的距离仍然是不会变的
3、localPosition
localPosition为自身矩形中心点(Pivot)与其父节点矩形中心点(Pivot)的相对位置坐标,与自身锚点(Anchors)无关。
anchoredPosition为矩形中心点(Pivot)与与锚点中心点之间的相对坐标,与父节点无关。
下面黄圈就是父节点的中心点,右侧叉是子物体的锚点
可以看到localPosition就是,子节点的中心点相对于父节点的中心点的位置(25,50)
anchoredPosition就是,子节点的中心点相对于自己的锚点的位置(-25,0,0)
看下图
4、offsetMin和offsetMax
offsetMin表示物体(本文中的红框)左下角相对AnchorMin的偏移,offsetMax表示物体右上角相对AnchorMax的偏移
5、SizeDelta
UI的宽高是我们经常需要获取的属性,它分两种情况
(1)锚点集中在一起
这种情况下,宽高是直接显示出来的
在debug模式下,可以直接看到SizeDelta,它这个时候代表的就是rect的宽高
这种情况下,我们在代码里,就有两种方式获取到当前UI的宽高
RectTransform rect = transform.GetComponent<RectTransform>();1)通过sizeDelta
rect.sizeDelta2)通过rect
rect.rect.size
它还有两个分别表示宽高的属性也可以使用
rect.rect.height
rect.rect.width
当前情况下,它们的输出值是一样的
(2)锚点分开
例如像这样
这个时候, 在原本显示宽高的地方,显示的属性就会发生变化
以Left为例,表示的是rect的左边到锚点形成的图形的左边的距离
(sizeDelta就是offsetMax - offsetMin的值,
可以看到当前的anchorMin(0,0)
可以看到当前的anchorMax(1,1)
)
offsetMax就是物体的右上角到anchorMax的距离,这里是(709,290)
offsetMin就是物体的左上角到anchorMin的距离,这里是(-710,-290)
(具体哪正哪负我也没搞懂)
sizeDelta.x = -1419
sizeDelta.y = -580
这个时候
SizeDelta的x分量,表示的left和right的值的和的相反数
SizeDelta的y分量,表示的top和bottom的值的和的相反数
所以这个时候,你要在代码中获取UI的宽高尺寸,就需要用Rect属性,而不是SizeDelta
可以知道,如果锚点重合,那么
offsetMax就是物体的右上角到anchorMax的距离,这里是(709,290)
offsetMin就是物体的左上角到anchorMin的距离,这里是(-710,-290)
anchorMin和anchorMax都是一个点,所以就是右上角到左下角,其实就是正常看到的宽和高
localPosition和anchoredPosition、offsetMin和offsetMax、SizeDelta相关推荐
- 转化百分比_localPosition与anchoredPosition的转化关系
跳转至专题目录 专题推荐文章: 温故知新--RectTransform成员属性的再认识 unity Scene View扩展之编辑器扩展总结 Unity获取鼠标点击ui GameObject 本系列目 ...
- Unity3D RectTransform中文图文详细-anchors用法pivot分析
Chinar blog :www.chinar.xin RectTransform 全解 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Ch ...
- Unity3D RectTransform中文教程详细用法分析
Chinar blog :www.chinar.xin RectTransform类解析 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Ch ...
- UGUI内核大探究(十三)Dropdown
Dropdown(下拉框)可谓是UGUI的集大成者,在Unity Editor里新建一个Dropdown,会随之附赠Text(Label对象).Image(Arrow对象).ScrollRect(Te ...
- uGUI知识点剖析之RectTransform
http://www.2fz1.com/post/unity-ugui-recttransform/#jtss-tsina uGUI知识点剖析之RectTransform 一.基本要点 RectTra ...
- unity的RectTransform
RectTransform继承于Transform,配合Canvas专门交给UGUI使用.控制UI的大小旋转缩放等. 1.Anchor unity中的ui元素是有严格的父子关系的,子物体的位置是根据父 ...
- Unity 蓝湖 关于UI工作流优化的思考(二)
背景和历史版本在下面这篇博客中查看: Unity & 蓝湖 关于UI工作流优化的思考 最新版本: 本文旨在让不会使用Unity的其他人员在简单了解该工具后,可以帮助研发人员搭建Unity中的U ...
- Unity3D简单的UI系统
Unity3d的ugui如果用得不好,非常的影响性能,可能很多人都不知道,其实ugui是基于网格模型渲染的,一个ugui组件就是一个Mesh,ui组件的Material为空,其实他是用了默认的Mate ...
- Unity 蓝湖 关于UI工作流优化的思考
我们Unity项目关于UI界面制作的工作流是这样的,UI设计人员将设计好的UI界面在Adobe XD中上传至蓝湖,Unity程序猿从蓝湖中下载切图资源包导入项目工程中,根据蓝湖中的效果图.样式信息进行 ...
最新文章
- 后端如何发出请求_gRPC系列(三) 如何借助HTTP2实现传输
- 网络编程学习笔记(recvfrom和sendto函数)
- [架构]--高并发问题及解决方案
- H5学习之旅-H5的样式(5)
- LeetCode:跳跃游戏【55】
- Linux从零开始(二、基础命令)
- android圆形进度条ProgressBar颜色设置
- python科学计算笔记(一)NumPy中ndarray对象、ufunc运算、矩阵运算
- Android开发面试题Service之startService和bindService之间的区别
- Mac OS修改VSCode Go的默认缩进格式
- mro列表_MRO模块操作指导书
- 西安计算机二级12月,2017年12月计算机二级MS Office习题答案(一)
- android4.4 adb工具包,Android ADB工具
- (转载)关注——软件界首例 暴风影音宣布召回1.2亿播放器软件
- About Endian
- QN902X在KEIL中使用定时器中断流程记录
- 电容式位移传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- win10 远程桌面和向日葵远控哪个好用
- unity中碰撞检测方法
- [文章]云计算、大数据和人工智能科普文