Unity UGUI系列七 Layout、Content Size Fitter、Aspect Ratio Fitter

参考
【Unity3D-UGUI原理篇】(五)Auto Layout 自动布局
Unity中UI的自动布局

image.png
一、Layout Element

https://docs.unity.cn/cn/2019.4/Manual/script-LayoutElement.html

image.png

  • Ignore Layout 启用后,布局系统将忽略此布局元素。
  • Min Width 此布局元素应具有的最小宽度。
  • Min Height 此布局元素应具有的最小高度。
  • Preferred Width 在分配额外可用宽度之前,此布局元素应具有的偏好宽度。
  • Preferred Height 在分配额外可用高度之前,此布局元素应具有的偏好高度。
  • Flexible Width 此布局元素应相对于其同级而填充的额外可用宽度的相对量。
  • Flexible Height 此布局元素应相对于其同级而填充的额外可用高度的相对量。
  • Layout Priority 此组件的布局优先级。如果一个游戏对象有一个以上包含布局属性的组件(例如,一个 Image 组件和一个 LayoutElement 组件),则布局系统将使用 Layout Priority 值最高的组件中的属性值。如果这些组件具有相同的 Layout Priority 值,则布局系统将使用每个属性的最大值,而不管该属性来自哪个组件。

Layout Element组件对子对象的分配原则如下:

首先分配 Min Width、Min Height
如果还有足够空间,分配 Preferred Width、Preferred Height
如果还有额外空间,分配 Flexible Width、Flexible Height

从以下图片可以看出图片宽度的增长方式:


image.png

image.png

首先分配 Min Width (300,红色部分)
如果还有足够空间,分配 Preferred Width (300~500,绿色部分)
如果还有额外空间,分配 Flexible Width :1 (500~700,蓝色部分)
比较特别的是 Flexible,他是代表著整个大小的比例,如果 Layout 下有2个物体,分别给 Flexible 设定为 0.3 与 0.7,那比例就会变成下图 :

image.png

另外要注意的是,Text、Image Component 会根据内容大小自动分配 Preferred Size。

二、Horizontal/Vertical Layout Group

参考
https://docs.unity.cn/cn/2019.4/Manual/script-HorizontalLayoutGroup.html

image.png

  • Padding 布局组边缘内的填充。
  • Spacing 布局元素之间的间距。
  • Child Alignment 用于子布局元素的对齐方式(如果这些元素未填满可用空间)。
  • Control Child Size 布局组是否控制其子布局元素的宽度和高度。
  • Use Child Scale 在为元素调整大小和进行布局时,布局组是否考虑其子布局元素的缩放。Width 和 Height 对应于每个子布局元素的 Rect Transform 组件中的 Scale > X 和 Scale > Y 值。
  • Child Force Expand 是否要强制子布局元素扩展以填充额外的可用空间。
1.Child Alignment
image.png

Upper,Middle,Lower可以理解为垂直方向上的是否居中

2.Control Child Size

勾上后,父容器变化时,这些Button的宽高会改变

3.Use Child Scale
image.png

如图,把左侧按钮的Scale.x改为2,如果不勾选Use Child Scale,就是布局组不考虑子元素的缩放,那么就叠到一块了。勾上后,则会自动计算Scale增加的宽度,如图:


image.png
4.Child Force Expand
  • 父对象>子元素,子元素自动水平排版方式填充满父对象的空间,如果无法填充满则使用空白填充,子元素大小不变。
  • 父对象<=子元素,子元素自动水平排版,子元素大小不变.
5.实例

Unity UI布局(Layout)与布局元素(Layout Element)
给PanelUp和PanelDown添加布局元素,并分别设置Flexible Height为2和1,这个Flexible Height就是用于设置控件显示比例的

image.png

三、Grid Layout Group

https://docs.unity.cn/cn/2019.4/Manual/script-GridLayoutGroup.html

image.png

  • Padding 布局组边缘内的填充。
  • Cell Size 要用于组内每个布局元素的大小。
  • Spacing 布局元素之间的间距。
  • Start Corner 第一个元素所在的角。
  • Start Axis 沿哪个主轴放置元素。Horizontal 将在填充整行后才开始新行。Vertical 将在填充整列后才开始新列。
  • Child Alignment 用于布局元素的对齐方式(如果这些元素未填满可用空间)。
  • Constraint 将网格约束为固定数量的行或列以便支持自动布局系统。
1.Cell Size

与其他布局组不同,网格布局组会忽略其包含的布局元素的最小大小、偏好大小和灵活大小属性,而是为所有这些元素分配固定大小,此大小则由网格布局组本身的 Cell Size 属性进行定义。

更改Cell Size会影响Button大小
2.Start Corner
image.png

可以设定如图这种元素,观察不同的Start Corner对应起始位置。

3.Start Axis
image.png
四、Content Size Fitter

这个组件控制着父物体的自身的大小,大小取决于子物体,或者是设定的大小比例。

如果我们现在有一个需求,必需要让 “父物件大小” 根据 “子物件大小” 进行缩放:

1.新建场景,新建一个Canvas,Canvas下新增空物体,给空物体增加Horizontal Layout Group组件。

这时如果增加 Button(子物件),上面有提到,Horizontal Layout Group 会根据子物件的 Layout Element 进行分配子物件大小,而不会修改父物件本身的大小

2.父物件下增加 Button(子物件),并增加 Layout Element组件,Min Width 调整为 100。
3.父物件增加 Content Size Fitter组件,Horizontal Fit 调整为 Min Size,透过子物件 Min Width 调整父物件本身大小
image.png

Horizontal、Vertical Fit有三个参数:

  • None 不调整
  • Min Size 根据子物件的 Min Width大小进行调整
  • Preferred Size 根据子物件的 Preferred 大小进行调整
4.此时如果 Button 复制增加,父物件本身的大小也会跟着改变
5.调整父物件的 pivot,可以控制缩放方向

通过上面实例,我们首先使用 Horizontal Layout Group 排列子物件,并在子物件增加 Layout Element 设置Min Width。最后通过 Content Size Fitter 取得子物件 Layout Element 设定父物件大小。至此父物件大小就会根据子物件大小进行缩放。

五、Aspect Ratio Fitter 长宽比装配组件
image.png
  • Aspect Mode 调整模式
  • Aspect Ratio 比例,此数值为 宽/高
1.Aspect Mode
  • None 不调整
  • Width Controls Height 基于 Width 为基准,依据比例改变 Height
  • Height Controls Width 基于 Height 为基准,依据比例改变 Width
  • Fit In Parent 依据比例将 宽高、位置、anchors自动调整,使此图形大小在父物件中完全贴齐,此模式可能不会包覆所有空间调整比例
  • Envelope Parent 依据比例将 宽高、位置、anchors自动调整,使此图形大小完全包覆父物件,此模式可能会超出空间调整比例
2.Width Controls Height:基于 Width 为基准,依据比例改变 Height
20180704150848186.gif

当 Width 改变时,Height 会依比例改变:


20180704151008246.gif
3.Height Controls Width:基于 Height 为基准,依据比例改变 Width
20180704151014444.gif

当 Height 改变时,Width 会依比例改变:


20180704151041640.gif
4.Fit In Parent:依据比例将 宽高、位置、anchors自动调整,使此图形大小在父物件中完全贴齐,此模式可能不会包覆所有空间调整比例
20180704151048629.gif

调整父物件大小,物体会依据比例贴齐父物件:


20180704151103337.gif
5.Envelope Parent:依据比例将 宽高、位置、anchors自动调整,使此图形大小完全包覆父物件,此模式可能会超出空间调整比例
20180704151122485.gif

调整父物件大小,物体会依据比例包覆父物件:


20180704151129262.gif
6.Content Size Fitter 与 Aspect Ratio Fitter的区别
  • Content Size Fitter 是通过子物件自动进行调整大小
  • Aspect Ratio Fitter 是通过数值(宽高比)进行调整
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容