「Unity3D」自动布局LayoutElement、ContentSizeFitter、AspectRatioFitter、GridLayoutGroup

news2024/9/27 7:17:54

布局元素与布局控制器

布局元素实现ILayoutElement接口,布局控制器实现ILayoutController接口,后者根据前者的属性控制具体布局——有些布局控制器也是布局元素,即同时实现这两个接口,如LayoutGroup

public interface ILayoutElement
{
    float minWidth       { get; }
    float minHeight      { get; }

    float preferredWidth { get; }
    float preferredHeight{ get; }

    float flexibleWidth  { get; }
    float flexibleHeight { get; }

    int   layoutPriority { get; }
  
    // 自下而上计算宽度,先计算子元素,再计算父元素
    void  CalculateLayoutInputHorizontal();
    // 自下而上计算高度,先计算子元素,再计算父元素
    void  CalculateLayoutInputVertical  ();
}
public interface ILayoutController
{
    // 自上而下计算宽度
    void SetLayoutHorizontal();
    // 自上而下计算高度
    void SetLayoutVertical  ();
}

注意,布局控制器,可以控制子布局元素,也可以控制同一个GameObject下的布局元素,相当于控制自己的布局,同时它也可以被别的布局控制器所控制,形成嵌套控制。

布局控制器会自动接管,RectTransform的一些属性设置,导致其为不可编辑的灰色状态。

LayoutElement

覆盖布局元素的属性,结合布局控制器,才能生效,比如:HorizontalLayoutGroup

  • 首先,尽量分配 Min 的空间。
  • 其次,有多余空间,分配 Preferred 的空间。
  • 最后,还有空间,就分配 Flexible 的空间。

其中,Min 和 Preferred 是绝对数值, Flexible是同级元素的比例,即:按照同级元素的Flexible的比例,去灵活分配多余的空间。

例如,两个Button的Flexible:

  • 如果是1 : 1,就是多余空间每个1 / 2,然后加到Preferred的尺寸上;
  • 如果是1 : 3,就是多余空间每个1 / 4与3 / 4,然后加到Preferred的尺寸上;
  • 如果是1 : 0.5,就是多余空间每个2 / 3与1 / 3,然后加到Preferred的尺寸上;
  • 如果是0 : 0,就相当于取消Flexible。

注意,容器的Control Child Size需要勾选上,子元素的Layout Element的才能其作用。

ContentSizeFitter

控制启用Min或Preferred尺寸,可以结合Layout Element同级使用,来生效Layout Element的设定。

注意,它生效的时候,如果尺寸变动,会根据pivot来改变伸缩方向,即:pivot在中心就是四圈伸展或收缩,pivot在左上就是向右下伸或收缩,以此类推。

AspectRatioFitter

这东西和Content Size Fitter一样使用,只不过是控制布局元素“宽高比”,同样也是根据pivot来改变伸缩方向——但不使用布局元素的Min或Preferred尺寸。

Width Controls Height:宽度不变,比率改变高度,比率越小越高,比率越大越低。 

Height Controls Width:高度不变,比率改变宽度,比率越小越窄,比率越大越宽。

Fit In Parent:不超越父容器(适应父容器),小于1高度不变,比率越小越窄,大于1宽度不变,越小越低。

Envelope Parent:超越父容器(封装父容器),小于1宽度不变,比率越小越高,大于1高度不变,越大越宽。

GridLayoutGroup

网格布局组,其元素可以自动排列,但本身width和height无法自适应,这会造成内部元素的越界或留白,这时候结合ContentSizeFitter同级约束——就可以实现网格布局,随着内部元素的多少自动适应,即:

将GridLayoutGroup的Constraint设置为Flexible,同时将ContentSizeFitter的Horizontal和Vertical都设置为Preferred

当然,也可以将GridLayoutGroup的Constraint设置为Fixed Row / Column,即固定行或列,这样结合ContentSizeFitter的Preferred,就可以让行或列自适应——否则,变动行或列的数量,会出现内部元素越界或留白的情况,此时可以用Child Alignment来对齐元素整体的位置,以及遮罩隐藏越界的部分。

另外,Start Corner属性是,第一个元素放在四角的哪一个,然后按照横向或纵向(Start Axis),依照顺序渐次排列填充——只有多行多列才能看出来效果。

可见,Child Alignment是对齐位置(在有多余空间的时候),Start Corner则是填充位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【原创教程】电气电工:电烙铁的使用方法(入门)

今天我们深入了解电烙铁的相关知识及其应用。电烙铁作为电气电工行业中的重要工具,它在焊接和电路维修等方面扮演着不可或缺的角色。接下来,我们将一起探索电烙铁的奥秘。 一、电烙铁概述 电烙铁是一种通过电能转化为热能进行焊接的工具。它具有体积小…

jenkins服务器重启,构建记录消失

1、进入系统管理查看系统运行日志,发现报保存构建日志失败 jenkins module java.base does not "opens java.lang.ref" to unnamed module 5276d6ee Java平台模块系统对类的可见性和访问权限进行了严格的控制。在Java 9及以上版本中,java.la…

武汉流星汇聚:深耕跨境电商,万企信赖之选,共绘全球贸易新蓝图

在全球化浪潮汹涌的今天,跨境电商作为连接世界经济的桥梁,正以前所未有的速度改变着国际贸易的格局。在这场充满机遇的旅途中,武汉流星汇聚电子商务有限公司犹如一颗璀璨的流星,划破长空,以其卓越的实力和不懈的努力&a…

JetBrains:XML tag has empty body警告

在xml文件中配置时,因为标签内容为空,出现黄色警告影响观感。 通过IDE配置关闭告警

编程语言|Python——为什么0.1+0.2≠0.3(深入理解Python中的浮点数运算)

一、问题描述 技术面的时候被问到一个python问题,即当我们输入0.1+0.2时,打印出来的却不是0.3,而是0.30000000000000004,为什么? 其实不仅是Python,很多编程语言例如C、Java、JavaScript等等都有这种特性。原理很简单,所有数的运算在计算机中都是进行二进制计算的,十进…

RS485 转 Lora 模块

一、功能概述 本产品是一款无线中继器,将 RS485 信号转为无线信号,通过 无线方式远传,实现远程通信功能。采用 Lora无线通信技术,工作 中心频率 433M ,空旷传输距离 7000 米。 二、接线、配置方法、指示灯状态 1 、…

【Python实战因果推断】63_随机实验与统计知识5

目录 Hypothesis Testing Null Hypothesis Hypothesis Testing 另一种引入不确定性的方法是陈述假设检验:两个组之间的均值差异是否在统计上与零(或其他任何值)不同?要回答这类问题,你需要回想正态分布的和或差也是正…

【Java算法专场】前缀和(上)

前言 在求数组或者矩阵求和等问题,我们如果采用暴力解法,时间复杂度可能会达到O(n)或者更高,因此,我们可利用前缀和来解决。 前缀和 前缀和是指序列中的n项和,相当于数学问题中秋数列的前n项和。主要用于数组或列表中…

[Bugku] web-CTF-POST

1.开启环境 2.根据题目得知使用POST传参,即可得到flag

[240802] 有关 Homebrew 的安全审核 | Running C++ anywhere like a script

目录 有关 Homebrew 的安全审核Running C anywhere like a script 有关 Homebrew 的安全审核 Trail of Bits 对 macOS 包管理工具 Homebrew 进行了安全审计,重点关注其核心代码库和 CI/CD 流程。审计发现了 Homebrew 中存在的一些问题,这些问题可能被攻…

来点八股文(四) 数据检索ESOLAPCK和Calcite

文章目录 压缩存储&索引codegen优化器向量化 如何解决深度分页问题? scoll 游标分页 使用的是快照,没法保证实时fromsize 最差的实现,内存占用和时间都很差search_after 搜索上下文 通过记录自增id来查询,减少了内存占用 luc…

GDAL——地理空间数据抽象库在VS2022下的编译

上图是GDAL在github上的首页截图,GDAL库本身是没法运行的(一开始想运行它看看,但后知后觉一个库单独怎么能运行呢哈哈哈哈哈哈)。编译成功后,会生成几个文件夹,里面有一些文件,把这些文件配置到合适的位置后&#xff0…

css-grid布局之美

一,grid布局概述 网格布局(Grid)是最强大的 CSS 布局方案。 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置…

游戏加速器推荐 网游加速器排行榜

游戏加速器推荐,玩游戏用什么加速器!我得给你推荐一款我常用的。首先呢,就是深度加速器,它针对目前手游网游的游戏加速效果特别棒,而且界面也很友好。 另外,还有深度加速器,这款加速器不仅支持国…

使用模版完成不同数据类型的数组的选择排序

目录 6.模版(167-263) 6.1函数模板 6.1.1函数模版注意事项 6.1.2函数模版案例--选择排序 1. 比较排序的基本概念 2. 决策树 3. 决策树的深度 4. 结论 5.选择排序示例: 6.模版(167-263) (项目先跳过) 模板不能直接使用,它只是一个框架. 模板不是万能的. 6.1函数模板…

HCIE还是CCIE?高级认证到底要怎么选?

HCIE与CCIE,作为网络技术领域的两大旗舰认证,一直是IT专业人士追求的目标。 它们不仅代表了个人技术能力的权威认可,更是职业生涯中的重要里程碑。 然而,面对这两个同为高级认证的金字招牌,许多人不禁要问:…

基于FPGA的数字信号处理(21)--超前进位加法器

目录 1、什么是超前进位加法器 2、CLA加法器的关键路径 3、CLA加法器的Verilog实现 4、CLA加法器的时序性能 5、总结 文章总目录点这里:《基于FPGA的数字信号处理》专栏的导航与说明 1、什么是超前进位加法器 在之前的文章,我们介绍了行波进位加法器…

安装linux系统的时候没有允许root用户远程登录,怎么修改?

1、进入/etc/ssh/sshd_config vim /etc/ssh/sshd_config /etc/ssh/sshd_config通常是 SSH 服务(Secure Shell)的配置文件。 SSH 是一种用于安全远程登录和执行命令的网络协议。在这个配置文件中,您可以设置诸如端口号、允许或拒绝的登录用户…

数据结构(5.4_1)——树的存储结构

树的逻辑结构 双亲表示法(顺序存储) 每个结点中保存指向双亲的“指针” #define MAX_TREE_SIZE 100//树中最多结点typedef struct {//树的结点定义int data;//数据元素int parent;//双亲位置域 }PTNode; typedef struct {//树的类型定义PTNode nodes[MAX_TREE_SIZE];//双亲表…

红外热成像手持终端:从建筑检测到野外搜救的全方位应用

红外热成像手持终端,凭借其独特的红外探测与夜视功能,广泛应用于多个关键领域。无论是军事侦察、消防救援中的夜间作业,还是电力巡检、野生动物观察等多样场景,其精准的红外热成像技术均能提供至关重要的实时数据,助力…