Unity/Auto Layout -- 理解Layout Elements(布局元素)

前言在UGUI1中,Canvas下的每个GameObject都会自动添加 Rect Transform 组件来控制自身的位置和大小。通常情况下,基于Rect Transform的布局系统已经足够灵活,可以方便地满足大部分UI布局的需要。利用UGUI中的 anchor(锚点)和 pivot(轴点)特性,可以让UI GameObject2实现大部分依赖父容器的定位功能,例如绑定在父容器的左上角或正...
摘要由CSDN通过智能技术生成

前言

在UGUI1中,Canvas下的每个GameObject都会自动添加 Rect Transform 组件来控制自身的位置和大小。通常情况下,基于Rect Transform的布局系统已经足够灵活,可以方便地满足大部分UI布局的需要。利用UGUI中的 anchor(锚点)和 pivot(轴点)特性,可以让UI GameObject2实现大部分依赖父容器的定位功能,例如绑定在父容器的左上角或正中央,长度和宽度撑满父类等功能。

然而,另外的一些需要父容器依赖子类的UI功能,仅仅使用Rect Transform则很难做到。例如,让Text文本框的大小根据字数动态变化;让列表的长度根据列表项的数量动态变化等等。它们可能满足以下条件中的一条和多条:

  1. 容器的具体大小在设计阶段无法提前预知
  2. 父容器的大小可能会在运行时动态变化
  3. 父容器的布局很大程度上依赖于子类

这种情况下,使用 Auto Layout (自动布局)往往可以达到预期的效果。

概念

Auto Layout

自动布局系统为具有嵌套结构的UI布局提供了可行方案(例如水平或垂直列表或表格),并且允许布局元素根据其包含的子类内容进行大小调节(例如可以根据文本调节自身大小的Text)。

自动布局系统是基于最基础的 Rect Transform 来构筑的,它可以使用在任何一个包含 Rect Transform 的元素上。

自动布局系统主要基于 layout elementslayout controllers 两种概念 。本文着重介绍 layout elements

Layout Elements

在Unity中, Layout Element 具有广义和狭义的区别。狭义上说,Layout Element 是一种可选的UI组件;广义上说, Layout Element指一切附加有 Rect Transform以及 其他任意数量的UI组件的GameObject。 Auto Layout 中提到的 Layout Elements 显然指的是其广义概念。

正因为广义上说所有UI GameObject都或多或少地扮演了 Layout Element的角色,所以每个UI GameObject都可以在其对应的Inspector面板中找到自身的Layout Properties参数。下面是一个新建的Text组件的Layout Properties示意图:

Layout Properties

实际情况和图片不符?
首先底部的黑底部分是可以通过其左上角的DropDown进行切换的,其次仅含有RectTransformUI GameObject是不会显示该面板的。
事实上,所有含有 Rect TransformUI GameObject都可以充当Layout Element

  • 83
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
Unity中进行multipart/form-data上传,可以使用UnityWebRequest类。具体步骤如下: 1. 创建一个UnityWebRequest对象,并设置请求的URL和请求方法为POST。 2. 设置请求头部信息,包括Content-Type为multipart/form-data,以及其他必要的信息。 3. 构造表单数据,将需要上传的数据按照multipart/form-data格式进行编码,并设置到UnityWebRequest对象中。 4. 发送请求,并等待服务器响应。 以下是一个示例代码: ``` IEnumerator UploadFile(string url, byte[] data) { UnityWebRequest request = new UnityWebRequest(url, "POST"); request.SetRequestHeader("Content-Type", "multipart/form-data; boundary=------------------------boundary"); string boundary = "--------------------------boundary"; byte[] formHeaderBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n"); byte[] formFooterBytes = System.Text.Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); byte[] bodyBytes = new byte[formHeaderBytes.Length + data.Length + formFooterBytes.Length]; System.Buffer.BlockCopy(formHeaderBytes, 0, bodyBytes, 0, formHeaderBytes.Length); System.Buffer.BlockCopy(data, 0, bodyBytes, formHeaderBytes.Length, data.Length); System.Buffer.BlockCopy(formFooterBytes, 0, bodyBytes, formHeaderBytes.Length + data.Length, formFooterBytes.Length); request.uploadHandler = new UploadHandlerRaw(bodyBytes); request.downloadHandler = new DownloadHandlerBuffer(); yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { Debug.Log("Upload complete!"); } else { Debug.Log("Error during upload: " + request.error); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值