细说UGUI中Anchor和Pivot(一)
来源:互联网 发布:淘宝客户关系管理分析 编辑:程序博客网 时间:2024/06/05 04:47
背景
相信刚接触UGUI的时候,这套新系统中RectTransform里的position,anchor,pivot一定让大家有点迷糊不适应吧。因此就想详细介绍一下这几个概念,之所以标题中没有提position,是因为主要还是以介绍Anchor和Pivot为主,position会带过介绍
概念
锚点Anchor
Anchor就是一个RectTransform相对于其父节点在父节点中固定的几个参考点。可能我的表述还不是很到位。所以分成几点来说明
父节点
锚点在从属结构上,是属于子RectTransform对象,是其中的一种属性,但是其取值范围是位于父节点的,也就是说,整个父节点的Rect的范围,都是anchor的取值范围(在编辑器中拖动锚点可以直观的看到)固定的参考点
锚点是一种定位的参考点,子对象以锚点为参考点,并相对于锚点进行定位。而锚点一旦设定,其位置相对与父节点是固定的,因此,子对象也就能相对于父节点进行定位了- 值范围
锚点取值在[0,1]之间,是一个比例值,这个比例值,是以父节点的width,和height来进行比例计算的,比如其值为1的话,是指父节点Rect的width的最远点,或是height的最高点
我们可以这样理解,假设我们将Rect中心点作为一个参考点,锚点代表了Rect自身相对于父节点的位置
轴点Pivot
轴点是Rect的实际中心点,和Rect尺寸中心点不同。尺寸中心点是以宽,高取1/2得到。而轴点是可以任意指定的,如果将Rect旋转,可以看到Rect是围绕轴点旋转,而不是中心点。轴点是范围也是[0,1]的比例值。轴点是属于Rect自身的。
我们这样理解,假设我们将Rect中心点来作为一个参考点的话,轴点代表了Rect相对于自身的偏移
anchoredPosition
当4个锚点三角合拢在一起的时候,锚点位置就是此时4点合拢的位置。而当4个锚点三角分开的时候,锚点用来计算anchoredPosition的位置是有4个锚点位置分别和轴点做插值计算,unity文档是这么说,我个人理解应该是将anchor的min,max经过关于轴点的插值结算,来得到一个新的点,这个新的点和pivot之间的相对距离就是anchoredPosition。
从上面轴点和锚点的概念介绍,在结合anchoredPosition的概念,我们就可以知道anchoredPosition的相对距离,实际上就表明了子Rect以Pivot为原点时,相对于父节点的偏移。在计算子节点的位置偏移时,永远是拿轴点而不是中心点来作为参考点的
子Rect的位置计算
(一)我们先假设父Rect,子Rect的轴点都在中心(0.5,0.5)的位置,4个锚点也在这个位置合拢。此时,子Rect相对于于父Rect的偏移是(0,0)。如果此时,仅仅是子Rect的轴点发生偏移,那么子Rect当前的偏移就是
offset_p = 轴点偏移
(二)继续上一步,如果此时锚点发生了变动(假设锚点还在一起,只是离开了中心位置),那么此时,Rect当前偏移就是
offset_a = offset_p + 锚点偏移
这里的锚点偏移就是anchoredPosition,这也是为什么设置该值可以改变RectTransform的位置的原因
如果锚点没有在一起,实际上只是多了一步,计算一个关于Pivot点插值的虚拟的点来代替锚点位置来做偏移计算。
(三)我们继续,假如此前两步都是在父Rect在世界坐标原点时候完成,那么如果现在父节点相对与世界坐标原点偏移了,那么Rect当前相对于世界坐标原点的偏移就是
offset = offset_a + 世界坐标偏移
今天先写到这里,老实说这个东西写清楚似乎要比理解清楚更难,我得整理整理思路,待续
- 细说UGUI中Anchor和Pivot(一)
- Unity UGUI中RectTransfrom中锚点(Anchor)、中心(Pivot)、Rect及坐标分析
- Unity UGUI中RectTransfrom中锚点(Anchor)、轴心(Pivot)、Rect及坐标分析
- Unity UGUI——Rect Transform组件(Anchor Presets)
- UGUI的学习和使用(一)
- unity3D(基于UGUI)网络游戏正在开发中 <一>"最近用UGUI做人物血条"
- Unity UGUI的localPosition和中心点Pivot 要注意的问题。
- SQL SERVER中PIVOT和UNPIVOT
- UGUI学习(一)创建控件和Anchors学习
- .net winform中Anchor和Dock的用法
- Pivot Table的今生前世(一)
- IE中取anchor
- 通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)
- 细说qt多线程(一)
- 细说Web前端(一)
- Anchor和Duck
- Unity-UGUI定时器(一)
- winform中Dock、Anchor属性的设置(简单实用)
- Ubuntu 16.04安装NVIDIA驱动
- mfc 对话框 孙鑫 第七章
- CodeForces
- HDU6075(签到水题)
- python学习网站
- 细说UGUI中Anchor和Pivot(一)
- UVA11488 字典树模板题
- 使用脚本刷怪的方法
- IntelliJ IDEA Error running Unnamed:Address localhost:1099 is already in use
- YV12,I420,YUV420P的区别与格式转换
- sourcetree免注册使用
- C# 中的委托和事件
- CSS position 属性讲解
- Lua学习笔记:Lua 中的C Api 概述