Unity之UI

本文详细介绍了Unity中的UGUI系统,包括Canvas的创建和渲染模式,基本布局如矩形变换、枢轴和锚点,以及视觉组件如Text、Image和交互组件如Button、Toggle。此外,还涵盖了自动布局的概念,如HorizontalLayout和GridLayout。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在Unity中开发UI功能多样,UI工具包、UGUI、IMGUI等,这里主要介绍UGUI。

一、Canvas

画布 (Canvas) 是应该容纳所有 UI 元素的区域。画布是一种带有画布组件的游戏对象,所有 UI 元素都必须是此类画布的子项。

1.创建Canvas

在Unity编辑视图的Hierarchy中右键UI->Canvas创建:
在这里插入图片描述

2.Render Mode

渲染模式分为三种:

(1)Screen Space - Overlay

这种渲染模式将UI放置于在场景之上渲染的屏幕上,如果调整屏幕大小或更改分辨率,则画布将自动更改大小来适应此情况。
在这里插入图片描述
此模式下会出现Sort Order值,当场景中含有多个Canvas时可以通过设置此值来控制每个Canvas的遮挡顺序。

Target Display:用于覆盖模式,将显示 UI 画布的显示索引,该设置指示画布渲染到指定的显示中, 支持的最大辅助显示(例如显示器)数量为 8。

Additional Shader Channels:获取或设置创建Canvas网格时要使用的其他着色器通道的遮罩,在画布始终包含位置,颜色和着色UV0渠道产生了叠加的网格时画布,也将包括普通和正切为ScreenSpace.Camera和世界空间画布。这些是要复制的可选附加参数。
在这里插入图片描述

using UnityEngine;

public class SetCanvasShaderChannels : MonoBehaviour
{
    public Canvas canvas;

    void Start()
    {
        canvas.additionalShaderChannels |= AdditionalCanvasShaderChannels.Normal;
        canvas.additionalShaderChannels |= AdditionalCanvasShaderChannels.TexCoord1;
        canvas.additionalShaderChannels |= AdditionalCanvasShaderChannels.Tangent;
    }
}

(2)Screen Space - Camera

此渲染模式类似于 Screen Space - Overlay,但在此模式下,画布放置在指定摄像机前面的给定距离处。UI 元素由此摄像机渲染,这意味着摄像机设置会影响 UI 的外观。如果摄像机设置为正交视图,则 UI 元素将以透视图渲染,透视失真量可由摄像机视野控制。如果调整屏幕大小、更改分辨率或摄像机视锥体发生改变,则画布也将自动更改大小来适应此情况。
在这里插入图片描述
RenderCamera:渲染显示该画布的相机。

Plane Distance:到渲染相机的距离。

Sorting Layer:当场景中有多个Canvas时控制每个Canvas的遮挡关系,为Default时,按Canvas在Hierarchy中的顺序决定。

(3)World Space

在此渲染模式下,画布的行为与场景中的所有其他对象相同。画布大小可用矩形变换进行手动设置,而 UI 元素将基于 3D 位置在场景中的其他对象前面或后面渲染。
在这里插入图片描述

3.Pixel Perfect

只有RenderMode为Screen类型时才有的选项。重置元素大小和坐标,使贴图的像素完美对应到屏幕像素上,使UI元素像素对应,效果就是边缘清晰不模糊。但是,如果许多元素被缩放或旋转过,或者使用了微妙的动画位置或缩放,则禁用 pixelPerfect 可能比较好,这样可使移动更为平滑。

二、基本布局

1.矩形工具

出于布局目的,每个 UI 元素都表示为一个矩形。可以使用工具栏中的矩形工具在场景视图中操作此矩形。矩形工具既可用于 Unity 的 2D 功能,也可用于 UI,实际上甚至可以用于 3D 对象。
在这里插入图片描述

2.矩形变换(Rect Transform)

矩形变换与常规变换一样具有位置、旋转和缩放,但它也有宽度和高度,用于指定矩形的尺寸。

3.大小与缩放

当使用矩形工具改变对象的大小时,通常对于 2D 系统中的 Sprites 和 3D 对象,它会改变对象的局部比例。然而,当它用于一个带有 Rect Transform 的对象时,它会改变宽度和高度,保持局部比例不变。这种调整大小不会影响字体大小、切片图像的边框等。

4.枢(Pivot)

旋转、大小和缩放修改发生在枢轴周围,因此枢轴的位置会影响旋转、调整大小或缩放的结果。当工具栏的枢轴按钮设置为枢轴模式时,可以在场景视图中移动矩形变换的枢轴。
在这里插入图片描述

5.锚(Anchors)

Rect Transforms 包括一个称为anchors的布局概念。锚点在场景视图中显示为四个小三角形手柄,并且锚点信息也显示在检查器中。
如果 Rect Transform 的父级也是 Rect Transform,则可以通过各种方式将子 Rect Transform 锚定到父 Rect Transform。例如,孩子可以被锚定到父母的中心,或角落之一。
锚定还允许孩子与父母的宽度或高度一起伸展。矩形的每个角到其对应的锚点都有一个固定的偏移量,即矩形的左上角到左上角的锚点有一个固定的偏移量,等等。这样矩形的不同角可以锚定到不同的点上。父矩形。
锚点的位置以父矩形宽度和高度的分数(或百分比)定义。0.0 (0%) 对应左侧或底部,0.5 (50%) 对应中间,1.0 (100%) 对应右侧或顶部。但锚点不限于侧面和中间;它们可以锚定到父矩形内的任何点。
您可以单独拖动每个锚点,或者如果它们在一起,您可以通过单击它们之间的中间并拖动来将它们拖到一起。如果在拖动锚点时按住Shift键,矩形的相应角将与锚点一起移动。
锚点手柄的一个有用功能是它们会自动捕捉到同级矩形的锚点以实现精确定位。
锚定预设:
在这里插入图片描述
如果锚编号字段不可见,您可以单击锚扩展箭头以显示锚编号字段。Anchor Min对应于 Scene View 中左下角的锚点手柄,Anchor Max对应于右上角的手柄。
矩形的位置字段显示不同,具体取决于锚点是在一起(产生固定的宽度和高度)还是分开(这会导致矩形与父矩形一起拉伸)。
当所有锚点手柄都在一起时,显示的字段为 Pos X、Pos Y、宽度和高度。Pos X 和 Pos Y 值表示枢轴相对于锚点的位置。
当锚点分开时,字段可以部分或完全更改为“左”、“右”、“上”和“下”。这些字段定义了由锚定义的矩形内的填充。如果锚点水平分离,则使用 Left 和 Right 字段,如果它们垂直分离,则使用 Top 和 Bottom 字段。

三、视觉组件

1.Text

在这里插入图片描述
在这里插入图片描述

2.Image

Image Type:
在这里插入图片描述
Simple - 均匀缩放整个精灵。
Sliced - 使用 3x3 精灵分区,确保大小调整不会扭曲角点,而是仅拉伸中心部分。
Tiled - 类似于 Sliced,但平铺(重复)中心部分而不是对其进行拉伸。对于完全没有边框的精灵,整个精灵都是平铺的。
Filled - 按照与 Simple 相同的方式显示精灵,但不同之处是使用定义的方向、方法和数量从原点开始填充精灵。
在这里插入图片描述

3.Raw Image

原始图像控件向用户显示非交互式图像。此图像可用于装饰或图标之类的用途,还可以从脚本更改图像以便反映其他控件的更改。该控件类似于图像 (Image) 控件,但为动画化图像和准确填充控件矩形提供了更多选项。但是,图像控件要求其纹理为精灵,而原始图像可以接受任何纹理。
在这里插入图片描述
在这里插入图片描述

4.Mask

遮罩不是可见的 UI 控件,而是一种修改控件子元素外观的方法。遮罩将子元素限制(即“掩盖”)为父元素的形状。因此,如果子项比父项大,则子项仅包含在父项以内的部分才可见。
在这里插入图片描述

5.RectMask2D

RectMask2D 是一个类似于遮罩 (Mask)控件的遮罩控件。遮罩将子元素限制为父元素的矩形。与标准的遮罩控件不同,这种控件有一些限制,但也有许多性能优势。

6.Shadow

阴影组件为图形组件(如文本或图像)添加简单的轮廓效果。必须与图形组件位于同一游戏对象上。
在这里插入图片描述

7.Outline

轮廓组件为图形组件(如文本或图像)添加简单的轮廓效果。必须与图形组件位于同一游戏对象上。
在这里插入图片描述

8.Position as UV1

此组件为文本和图像图形添加简单的 UV1 位置效果。
在这里插入图片描述

四、交互组件

1.Button

按钮控件可响应用户的点击并用于启动或确认操作。

2.Toggle

开关控件是让用户打开或关闭某个选项的复选框。

3.Toggle Group

开关组不是可见的 UI 控件,而是一种修改一组开关的行为的方法。属于同一组的开关将受到约束,即一次只能打开其中一个开关:通过按下打开其中一个开关便会自动关闭其他开关。
在这里插入图片描述

4.Slider

滑动条控件允许用户通过拖动鼠标从预定范围中选择数值。请注意,类似的滚动条 (ScrollBar)控件用于滚动而不是选择数值。熟悉的示例包括游戏中的难度设置和图像编辑器中的亮度设置。
在这里插入图片描述
在这里插入图片描述

5.Dropdown

此控件会显示当前选择的选项。单击后,此控件会打开选项列表,以便选择新选项。选择新选项后,列表再次关闭,而控件将显示新选择的选项。如果用户单击控件本身或画布内的任何其他位置,列表也将关闭。
在这里插入图片描述

6.InputField

输入字段是一种使文本 (Text) 控件的文本可编辑的方法。与其他交互控件一样,输入字段本身不是可见的 UI 元素,必须与一个或多个可视 UI 元素组合才能显示。
在这里插入图片描述
在这里插入图片描述

7.Scroll View

当占用大量空间的内容需要在小区域中显示时,可使用滚动矩形。滚动矩形提供了滚动此内容的功能。

通常情况下,滚动矩形与遮罩 (Mask) 相结合来创建滚动视图,在产生的视图中只有滚动矩形内的可滚动内容为可见状态。此外,滚动矩形还可与一个或两个可拖动以便水平或垂直滚动的滚动条 (Scrollbar) 组合使用。
在这里插入图片描述

五、自动布局

1.布局元素

在这里插入图片描述

2.内容大小适配器(Content Size Fitter)

内容大小适配器充当布局控制器,可用于控制其自身布局元素的大小。大小由游戏对象上布局元素组件提供的最小大小或偏好大小确定。此类布局元素可以是图像或文本组件、布局组或布局元素组件。
在这里插入图片描述

3.宽高比适配器(Aspect Ratio Fitter)

宽高比适配器充当布局控制器,可用于控制其自身布局元素的大小。宽高比适配器可以调整高度来适应宽度或反之,也可以使元素在其父项内部适应或包裹其父项。宽高比适配器不考虑布局信息,例如最小大小和偏好大小。
在这里插入图片描述

4.水平布局组(Horizontal Layout)

在这里插入图片描述

5.垂直布局组(Vertical Layout)

在这里插入图片描述

6.网格布局组(Grid Layout)

在这里插入图片描述
在这里插入图片描述

微信小程序开发中,WXML(WeiXin Markup Language)主要用于描述页面结构,而 JavaScript 文件负责处理数据逻辑和事件响应。两者通过数据绑定机制紧密联系在一起。 ### 示例说明: 假设我们想创建一个简单的计数器应用程序,用户每次点击按钮时数字增加一。 #### WXML部分 (index.wxml): ```html <view> 当前值:{{ counter }} </view> <button bindtap="incrementCounter">+1</button> ``` 在这里,“{{ }}”语法表示将变量插入到模板中。这里的 `counter` 变量将会从 JS 数据模型里获取其当前值并显示出来。“bindtap='incrementCounter'”绑定了一个触摸即释放的事件处理器给这个 button ,当用户点按此按钮时触发 incrementCounter 函数。 #### JavaScript 部分 (index.js): ```javascript Page({ data: { counter: 0 // 初始化状态数据 }, incrementCounter() { this.setData({ // 更新界面所需的数据 counter: this.data.counter + 1 }); } }); ``` 在这个例子中,每当 click event 被激发就会调用 incrementCounter 方法来改变存储于 Page 对象下的 “data” 字段内的数值;随后 setData 触发 UI 更新流程让新的结果反映至屏幕上。 --- 这种模式体现了 MVVM架构理念——Model-View-ViewModel,在这里表现为 Model(数据), View(WXML所展现的内容),以及 ViewModel(Page实例及其包含的行为)。通过这样的关联方式可以让前端开发者更专注于业务规则编写而不必关心DOM操作细节,简化了跨平台的应用程序维护工作量的同时也提高了代码复用率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番茄炒蛋鱼香肉丝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值