当前位置: 首页 > news >正文

【unity游戏开发入门到精通——UGUI】UGUI自动布局组件

注意:考虑到UGUI的内容比较多,我将UGUI的内容分开,并全部整合放在【unity游戏开发——UGUI】专栏里,感兴趣的小伙伴可以前往逐一查看学习。

文章目录

  • 前言
    • 1、查看布局属性
    • 2、布局属性参数
    • 3、自动布局原理
  • 一、HorizontalLayoutGroup、VerticalLayoutGroup 水平垂直布局组件
    • 1、参数介绍
    • 2、实例
  • 二、LayoutElement 布局元素组件
    • 1、参数
    • 2、实例
      • 设置布局元素组件的`Min Width`最小宽度和`Min Height`最小高度
      • 设置布局元素组件的`Preferred Width`首选宽度和`Preferred Height`首选高度
      • 设置布局元素组件的`Flexible Width`弹性宽度和`Flexible Height`弹性高度
  • 三、ContentSizeFitter 内容大小适配器
    • 1、参数
    • 2、实例:文字适配
  • 四、GridLayoutGroup 网格布局组件
    • 1、参数
    • 2、实例
  • 五、AspectRatioFitter 宽高比适配器
    • 1、参数
      • 1.1 Aspect Mode:纵横模式,用于调整矩形大小以实现宽高比。
      • 1.2 Aspect Ratio:宽度除以高度的比值,即宽高比。
    • 2、实例
  • 专栏推荐
  • 完结

前言

虽然UGUI的RectTransform已经非常方便的可以帮助我们快速布局,但UGUI中还提供了很多可以帮助我们对UI控件进行自动布局的组件。他们可以帮助我们自动的设置UI控件的位置和大小等。

注意要参与自动布局的布局元素必须包含布局属性,其实也就是指具备RectTransform的UI组件。一般是布局组件放到父对象上,子对象就是被布局的对象。

1、查看布局属性

点击UI下方栏,选择布局属性查看布局属性
在这里插入图片描述

2、布局属性参数

在这里插入图片描述

属性翻译功能
Min Width最小宽度该布局元素应具有的最小宽度。
Min Height最小高度该布局元素应具有的最小高度。
Preferred Width首选宽度该布局元素在分配额外可用宽度之前应具有的首选宽度。
Preferred Height首选高度该布局元素在分配额外可用高度之前应具有的首选高度。
Flexible Width弹性宽度该布局元素相对于其兄弟元素应填充的额外可用宽度的相对量。
Flexible Height弹性高度该布局元素相对于其兄弟元素应填充的额外可用高度的相对量。

3、自动布局原理

在进行自动布局时,会通过计算布局元素中的这6个属性来确定控件的大小和位置。

在布局时,布局元素的大小设置遵循以下基本规则:

  • 首先分配最小尺寸属性(及Minmum width 和 Minmum height)。
  • 如果父容器中有足够的可用空间,则分配 Preferred width 和 Preferred height
  • 如果上述两条规则分配完成后仍有额外空间,则分配 Flexible width 和 Flexible height

一般情况下,布局元素的这些属性都是0。通常情况下,我们不会手动修改这些属性,但是如果有需要,可以手动添加一个 LayoutElement组件(下面会介绍) 来修改这些布局属性。

一、HorizontalLayoutGroup、VerticalLayoutGroup 水平垂直布局组件

水平垂直布局组件可以将子对象并排或者竖直放在一起。水平和垂直布局组件使用方式和参数都差不多所以我们可以一起来介绍。

1、参数介绍

在这里插入图片描述

属性翻译功能
Padding填充左右上下边缘的偏移位置。
Spacing间距子对象之间的间距。
ChildAlignment子级对齐九宫格对齐方式。
Control Child Size控制子对象的大小是否控制子对象的宽高。
Use Child Scale使用子级缩放在设置子对象大小和布局时,是否考虑子对象的缩放。
Child Force Expand子级扩展是否强制子对象扩展以填充额外可用空间。

子级对齐属性
在这里插入图片描述

2、实例

垂直布局控件(Vertical Layout Group)
在这里插入图片描述

水平布局控件(Horizontal Layout Group)
在这里插入图片描述

二、LayoutElement 布局元素组件

布局元素组件允许您覆盖一个或多个布局属性的值。勾选您想要覆盖的属性复选框,然后指定您想要覆盖的值。

1、参数

当您启用宽度或高度属性时,旁边会出现一个值字段。使用此值字段输入宽度或高度的精确值。Min and Preferred大小使用常规单位,而Flexible 大小使用相对单位。
在这里插入图片描述

属性翻译功能
Ignore Layout忽略布局当启用时,布局系统会忽略此布局元素。
Min Width最小宽度该布局元素应具有的最小宽度。
Min Height最小高度该布局元素应具有的最小高度。
Preferred Width首选宽度该布局元素在分配额外可用宽度之前应具有的首选宽度。
Preferred Height首选高度该布局元素在分配额外可用高度之前应具有的首选高度。
Flexible Width弹性宽度该布局元素相对于其兄弟元素应填充的额外可用宽度的相对量。通常,弹性宽度设置为 0 或 1。
Flexible Height弹性高度该布局元素相对于其兄弟元素应填充的额外可用高度的相对量。通常,弹性高度设置为 0 或 1。
Layout Priority布局优先级该组件的布局优先级。如果一个 GameObject 有多个具有布局属性的组件(例如,图像组件和布局元素组件),布局系统将使用具有最高布局优先级的组件的属性值。如果组件具有相同的布局优先级,布局系统将使用每个属性的最高值,而不考虑它来自哪个组件。

可以看到布局属性也跟着改了
在这里插入图片描述

2、实例

设置布局元素组件的Min Width最小宽度和Min Height最小高度

添加一个父级,设置宽高100x100,添加水平布局组件
在这里插入图片描述
给全部子对象添加LayoutElement布局元素组件。

比如设置第一个子元素的最小宽度和最小高度,强行设置成10x10。
在这里插入图片描述
设置第二个子元素的最小宽度和最小高度,强行设置成10x20。
在这里插入图片描述
就算父对象很小,子对象最小也会保持设置的最小宽度和最小高度。如下:
在这里插入图片描述

设置布局元素组件的Preferred Width首选宽度和Preferred Height首选高度

添加一个父级,设置宽高100x100,添加水平布局组件
在这里插入图片描述
给全部子对象添加LayoutElement布局元素组件。

如果父容器宽度够,则按照实际显示。
比如设置第一个子元素的首选宽度,为50。
在这里插入图片描述
设置第二个子元素的首选宽度,为10。
在这里插入图片描述
如果父容器宽度不够,则按比例显示。子对象会保持设置的第一个子元素首选宽度 / 第一个子元素首选宽度比。如下我将父级宽度设置成30:
在这里插入图片描述
第一个子元素宽度就变为25
在这里插入图片描述
第二个子元素宽度就变为5
在这里插入图片描述

设置布局元素组件的Flexible Width弹性宽度和Flexible Height弹性高度

通常,弹性宽度高度设置为 0 或 1。

添加一个父级,设置宽高100x100,添加水平布局组件
在这里插入图片描述
给全部子对象添加LayoutElement布局元素组件。

子元素的实际宽高会按设置的弹性宽度的比例显示。比如设置第一个子元素的弹性宽度,为3。实际宽度就是30。
在这里插入图片描述
设置第二个子元素的弹性宽度,为7。实际宽度就是70。
在这里插入图片描述

三、ContentSizeFitter 内容大小适配器

内容大小适配器(Content Size Fitter)可以自动调整 RectTransform 的宽度和高度,以使组件自动设置大小。

通常在 Text 组件或者在Scroll View滚动容器添加到content上使用。

1、参数

在这里插入图片描述

属性翻译功能
Horizontal Fit水平适应控制宽度的方式。
Vertical Fit垂直适应控制高度的方式。

可选参数包括:
在这里插入图片描述
Unconstrained:不根据布局元素伸展宽度或高度。
Min Size:根据布局元素的最小宽度或高度伸展。
Preferred Size:根据布局元素的首选宽度或高度伸展宽度或者高度。

2、实例:文字适配

我们添加一个Text 组件,然后在里面加了很多文本内容,发现默认情况下,文本内容如果超出矩形宽高了,则被隐藏了
在这里插入图片描述
这时候我们可以给它添加一个ContentSizeFitter 内容大小适配器
如果我们选择水平适配,则根据布局元素的首选宽度伸展宽度。
在这里插入图片描述
我们发现宽度已经自适应了,我们无法进行修改了
在这里插入图片描述
如果我们只选择垂直适配,则根据布局元素的首选高度伸展高度。
在这里插入图片描述
我们发现高度已经自适应了,我们无法进行修改了
在这里插入图片描述
正常我们都会只选择垂直适配,让文本的高度自适应。即使我们再填充文本,他也能很好的进行适配显示。
在这里插入图片描述

四、GridLayoutGroup 网格布局组件

网格布局组件可以将子对象当成一个个的格子,并设置它们的大小和位置。有点像前面HorizontalLayoutGroup+VerticalLayoutGroup 水平垂直布局组件的集合体。

一般在Scroll View滚动容器添加到content上和ContentSizeFitter 内容大小适配器一起使用。

1、参数

在这里插入图片描述

属性翻译功能
Padding填充左右上下边缘的偏移位置。
Cell Size单元格大小每个格子的大小。
Spacing间距格子之间的间隔。
Start Corner开始角落第一个元素所在的位置(四个角)。
Start Axis启动轴沿着哪个轴放置元素;
Horizontal 水平放置并换行,
Vertical 竖直放置并换列。
Child Alignment子级对齐格子的对齐方式(九宫格)。
Constraint行列约束Flexible:灵活模式,根据容器大小自动适应。
Fixed Column Count:固定列数。
Fixed Row Count:固定行数。

2、实例

我们添加一个滚动视图
在这里插入图片描述
我们直接在里面填充一些子元素图片,他们是会堆叠在一起的。
在这里插入图片描述
我们可以在Content上添加GridLayoutGroup 网格布局组件,并配置参数,可以发现子元素内容大小就会很好的进行适配显示。
在这里插入图片描述
但是假设如果我们再往滚动视图中动态的添加更多的子元素,滚动视图是不会自动改变大小的。
在这里插入图片描述
这时候我们可以给滚动视图再添加前面介绍的ContentSizeFitter 内容大小适配器,并设置为水平和垂直适应。
在这里插入图片描述
这样再动态添加子元素时,滚动视图会自适应宽高。
在这里插入图片描述
我们可以运行查看滚动视图的效果。一起正常。

在这里插入图片描述

五、AspectRatioFitter 宽高比适配器

可以让布局元素按照一定的比例调整自身的大小,并在父对象内部根据父对象的大小进行适配。

1、参数

在这里插入图片描述

1.1 Aspect Mode:纵横模式,用于调整矩形大小以实现宽高比。

在这里插入图片描述

  • None:不对矩形进行宽高比适配。
  • Width Controls Height:根据宽度自动调整高度。
  • Height Controls Width:根据高度自动调整宽度。
  • Fit In Parent:自动调整宽度、高度、位置和锚点,使矩形适应父项的矩形,同时保持宽高比,可能会出现“黑边”。
  • Envelope Parent:自动调整宽度、高度、位置和锚点,使矩形覆盖父项的整个区域,同时保持宽高比,可能会出现“裁剪”。

1.2 Aspect Ratio:宽度除以高度的比值,即宽高比。

2、实例

随意新增一个图片,作为父级
在这里插入图片描述
新增一个图片子元素,并绑定AspectRatioFitter 宽高比适配器组件
在这里插入图片描述
修改纵横模式为Width Controls Height,宽高比为2。这时候我们仅可以修改图片的宽度,无论我们如何修改宽度,图片的宽高比永远是我们前面设置的宽高比1:2。
在这里插入图片描述
Height Controls Width模式其实类似,只不过仅可以修改的是图片高度而已
在这里插入图片描述
设置为Fit In Parent模式,会自动调整宽度、高度、位置和锚点,使矩形适应父项的矩形,同时保持宽高比,可能会出现“黑边”。
在这里插入图片描述
在这里插入图片描述
设置为Envelope Parent模式,会自动调整宽度、高度、位置和锚点,使矩形覆盖父项的整个区域,同时保持宽高比,可能会出现“裁剪”。
在这里插入图片描述
在这里插入图片描述


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

http://www.xdnf.cn/news/257131.html

相关文章:

  • 数值与字典解决方案第二十六讲:FILTER函数在去除数据的方法
  • 【大模型】多模态推理
  • 传奇各职业/战士/法师/道士戒指爆率及出处产出地/圣战/法神/天尊/虹魔/魔血/麻痹/超负载/求婚/隐身/传送/复活/护身/祈祷/火焰
  • 第Y3周:yolov5s.yaml文件解读
  • C++ set和map
  • 【dify—10】工作流实战——文生图工具
  • 深度学习框架PyTorch——从入门到精通(YouTube系列 - 4)——使用PyTorch构建模型
  • 截图软件、画图软件、左右分屏快捷键
  • 读懂 Vue3 路由:从入门到实战
  • 交错轴啮合原理加工齿轮方法有哪些?
  • Java文件上传
  • 历史数据分析——运输服务
  • 泰迪杯特等奖案例学习资料:基于边缘计算与多模态融合的温室传感器故障自诊断系统设计
  • AI Rack架构高速互连的挑战:损耗设计与信号完整性的设计框架
  • 【二叉树】java源码实现
  • 安装了新版本的python解释器,但在命令行窗口使用`--version`无法查看版本信息
  • C++ 项目中的多语言字符串管理方案(支持自动提示与动态加载)
  • 数字智慧方案5874丨智慧交通收费稽核管理体系的构建与思考(44页PPT)(文末有下载方式)
  • Qt C++简单图形界面与绘图实验
  • 实现水平垂直居中的多种方法
  • 随机微分方程(SDE):股票价格模型、利率模型的构建
  • 【AI面试准备】传统测试工程师Prompt Engineering转型指南
  • 多种尝试解决Pycharm无法粘贴外部文本【本人问题已解决】
  • 第二届平航杯wp
  • 【Linux】线程同步与互斥
  • Vite 工具链
  • 变转速振动信号分析处理与故障诊断算法模块
  • 数字智慧方案6197丨智慧用电一体化服务运营解决方案(34页PPT)(文末有下载方式)
  • linux进程的复制和替换
  • map和set的遗留 + AVL树(1):