有时候会发现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相关推荐

  1. 转化百分比_localPosition与anchoredPosition的转化关系

    跳转至专题目录 专题推荐文章: 温故知新--RectTransform成员属性的再认识 unity Scene View扩展之编辑器扩展总结 Unity获取鼠标点击ui GameObject 本系列目 ...

  2. Unity3D RectTransform中文图文详细-anchors用法pivot分析

    Chinar blog :www.chinar.xin RectTransform 全解 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Ch ...

  3. Unity3D RectTransform中文教程详细用法分析

    Chinar blog :www.chinar.xin RectTransform类解析 本文提供全流程,中文翻译. Chinar 的初衷是将一种简单的生活方式带给世人 使有限时间 具备无限可能 Ch ...

  4. UGUI内核大探究(十三)Dropdown

    Dropdown(下拉框)可谓是UGUI的集大成者,在Unity Editor里新建一个Dropdown,会随之附赠Text(Label对象).Image(Arrow对象).ScrollRect(Te ...

  5. uGUI知识点剖析之RectTransform

    http://www.2fz1.com/post/unity-ugui-recttransform/#jtss-tsina uGUI知识点剖析之RectTransform 一.基本要点 RectTra ...

  6. unity的RectTransform

    RectTransform继承于Transform,配合Canvas专门交给UGUI使用.控制UI的大小旋转缩放等. 1.Anchor unity中的ui元素是有严格的父子关系的,子物体的位置是根据父 ...

  7. Unity 蓝湖 关于UI工作流优化的思考(二)

    背景和历史版本在下面这篇博客中查看: Unity & 蓝湖 关于UI工作流优化的思考 最新版本: 本文旨在让不会使用Unity的其他人员在简单了解该工具后,可以帮助研发人员搭建Unity中的U ...

  8. Unity3D简单的UI系统

    Unity3d的ugui如果用得不好,非常的影响性能,可能很多人都不知道,其实ugui是基于网格模型渲染的,一个ugui组件就是一个Mesh,ui组件的Material为空,其实他是用了默认的Mate ...

  9. Unity 蓝湖 关于UI工作流优化的思考

    我们Unity项目关于UI界面制作的工作流是这样的,UI设计人员将设计好的UI界面在Adobe XD中上传至蓝湖,Unity程序猿从蓝湖中下载切图资源包导入项目工程中,根据蓝湖中的效果图.样式信息进行 ...

最新文章

  1. 后端如何发出请求_gRPC系列(三) 如何借助HTTP2实现传输
  2. 网络编程学习笔记(recvfrom和sendto函数)
  3. [架构]--高并发问题及解决方案
  4. H5学习之旅-H5的样式(5)
  5. LeetCode:跳跃游戏【55】
  6. Linux从零开始(二、基础命令)
  7. android圆形进度条ProgressBar颜色设置
  8. python科学计算笔记(一)NumPy中ndarray对象、ufunc运算、矩阵运算
  9. Android开发面试题Service之startService和bindService之间的区别
  10. Mac OS修改VSCode Go的默认缩进格式
  11. mro列表_MRO模块操作指导书
  12. 西安计算机二级12月,2017年12月计算机二级MS Office习题答案(一)
  13. android4.4 adb工具包,Android ADB工具
  14. (转载)关注——软件界首例 暴风影音宣布召回1.2亿播放器软件
  15. About Endian
  16. QN902X在KEIL中使用定时器中断流程记录
  17. 电容式位移传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. win10 远程桌面和向日葵远控哪个好用
  19. unity中碰撞检测方法
  20. [文章]云计算、大数据和人工智能科普文

热门文章

  1. ERP管理系统规划四大注意事项
  2. IceSSL插件配置
  3. 再见!深圳!再见!腾讯!
  4. Java中的代码点和代码单元(转)
  5. linux终端有颜色字体
  6. Fiddler抓包Android手机https、http教程
  7. charles抓手机端的包(android手机)
  8. set -ex是什么意思?
  9. 修复WIN7系统开机黑屏,只剩下鼠标能动的问题。
  10. 《逆袭大学——传给IT学子的正能量》进展及最终目录