Unity(2022.3.41LTS) - UI详细介绍-画布

目录

零. 简介

一、画布的作用

二、画布的组件

Canvas Scaler(画布缩放器):

Constant Pixel Size模式 更改分辨率

Scale With Screen Size 模式 更改分辨率

Constant Physical Size模式 更改分辨率

Graphic Raycaster(图形射线投射器):

三、创建和编辑画布

四、代码控制画布

五、优化和注意事项

六. UI自适应,适配



零. 简介

在 Unity 中,画布(Canvas)是构建用户界面(UI)的基础组件。

一、画布的作用

  1. 容器:画布是所有 UI 元素的根容器。所有的 UI 组件,如文本、按钮、图像等,都必须是画布的子对象才能在游戏中显示。
  2. 渲染模式:决定了 UI 元素在屏幕上的渲染方式。Unity 提供了三种主要的画布渲染模式:
    • Screen Space - Overlay:UI 元素直接渲染在屏幕上,无视场景中的相机。这种模式下,UI 始终在最前面,并且大小与屏幕分辨率直接相关。
    • Screen Space - Camera:UI 元素通过一个指定的相机进行渲染。可以设置相机的距离和视角,使 UI 看起来像是在 3D 场景中的一个平面上。这种模式对于创建与场景深度相关的 UI 效果很有用。专门做一个UI摄像机用来渲染.和主摄像机设置好深度.
    • World Space:画布被视为一个普通的 3D 游戏对象,可以在场景中进行定位、旋转和缩放。UI 元素会根据世界坐标进行渲染,适合创建与场景交互的 3D UI。

二、画布的组件

  1. Canvas Scaler(画布缩放器)

    • 用于控制画布的缩放方式,以适应不同的屏幕尺寸和分辨率。
    • 提供了三种缩放模式:
      • Constant Pixel Size:UI 元素的大小以像素为单位固定,不会随屏幕分辨率变化而缩放。在不同分辨率下,UI 可能会出现裁剪或显示不全的情况。
      • Scale With Screen Size:根据屏幕的尺寸和分辨率进行缩放。可以设置参考分辨率,当屏幕尺寸与参考分辨率不同时,UI 会自动进行缩放以保持相对比例。
      • Constant Physical Size:根据物理尺寸进行缩放,例如毫米或英寸。这种模式适用于需要在不同设备上保持实际物理大小一致的 UI。

Constant Pixel Size模式 更改分辨率

1920*1080

3686*2460

Scale With Screen Size 模式 更改分辨率

1920*1080

3686*2460

Constant Physical Size模式 更改分辨率

1920*1080

3840*2160

所以一般做UI适配推荐Scale With Screen Size 模式

Graphic Raycaster(图形射线投射器)

  • 负责处理 UI 元素的交互事件,如鼠标点击、触摸等。
  • 当用户与 UI 进行交互时,图形射线投射器会检测是否有 UI 元素被点击,并将事件传递给相应的组件进行处理。

三、创建和编辑画布

  1. 在 Unity 编辑器中,可以通过 GameObject -> UI -> Canvas 菜单创建一个新的画布。
  2. 可以在 Inspector 窗口中调整画布的属性,如渲染模式、缩放器设置等。
  3. 可以通过添加子对象来创建 UI 元素,如文本、按钮、图像等。可以使用 Unity 的 UI 工具或手动编写脚本来创建和布局 UI。

四、代码控制画布

  1. 通过脚本可以动态地创建、修改和删除画布及其子对象。
  2. 可以获取画布的引用,并通过代码修改其属性和子对象的状态。
  3. 可以响应 UI 事件,如按钮点击、滑动条变化等,通过代码执行相应的逻辑。

例如:

using UnityEngine;
using UnityEngine.UI;

public class UIController : MonoBehaviour
{
    public Canvas myCanvas;

    void Start()
    {
        // 修改画布的渲染模式
        myCanvas.renderMode = RenderMode.ScreenSpaceCamera;

        // 获取画布上的一个按钮组件并添加点击事件
        Button myButton = myCanvas.GetComponentInChildren<Button>();
        myButton.onClick.AddListener(OnButtonClick);
    }

    void OnButtonClick()
    {
        Debug.Log("Button clicked!");
    }
}

在这个示例中,通过代码获取了一个画布的引用,并修改了其渲染模式。然后,获取了画布上的一个按钮组件,并为其点击事件添加了一个处理函数。

五、优化和注意事项

  1. 性能优化:画布上的 UI 元素过多可能会影响性能。可以使用合批技术来减少绘制调用次数,优化 UI 的渲染性能。
  2. 适配不同屏幕尺寸:根据不同的游戏平台和目标设备,合理设置画布的缩放器,以确保 UI 在各种屏幕尺寸下都能正常显示。
  3. 层级管理:注意 UI 元素的层级关系,避免出现遮挡或显示异常的情况。可以使用 Rect Transform 的 Z 轴位置或 UI 元素的 Order in Layer 属性来调整层级。
  4. 事件处理:确保正确地处理 UI 事件,避免出现误触发或漏触发的情况。可以使用图形射线投射器的设置和事件系统的回调函数来管理 UI 交互。

六. UI自适应,适配

在 Unity 中,Canvas Scaler(画布缩放器)的 “Scale With Screen Size”(随屏幕尺寸缩放)模式是一种常用的 UI 适配方式。

一、模式特点

  1. 动态适配:此模式会根据不同的屏幕尺寸和分辨率自动调整 UI 的大小和布局,以保持相对一致的视觉效果。
  2. 参考分辨率:可以设置一个参考分辨率,当实际屏幕尺寸与参考分辨率不同时,UI 会按照一定的比例进行缩放。例如,如果参考分辨率为 1920x1080,而实际屏幕分辨率为 1280x720,UI 会相应地缩小。

二、主要设置参数

  1. Reference Resolution(参考分辨率):决定了 UI 在设计时的基准尺寸。通常根据目标平台和设计需求来设置。例如,如果你的游戏主要面向 PC 平台,可能会设置一个较高的参考分辨率,如 1920x1080;如果是移动平台,可以根据不同设备的常见分辨率进行设置。
  2. Match Width Or Height(匹配宽度或高度):用于确定在不同屏幕尺寸下,UI 缩放是基于宽度还是高度进行优先匹配。取值范围为 0 到 1,表示从完全基于宽度匹配到完全基于高度匹配。例如,如果设置为 0.5,表示宽度和高度的影响各占一半。看游戏是横屏还是竖屏来做修改.
  3. Screen Match Mode(屏幕匹配模式):有三种选项:
    • Match Width Or Height:根据 “Match Width Or Height” 参数的值进行宽度或高度的匹配。
    • Expand:在保持 UI 比例不变的情况下,尽可能地填满整个屏幕。如果屏幕尺寸大于参考分辨率,UI 会放大;如果屏幕尺寸小于参考分辨率,UI 会缩小,但不会出现黑边。
    • Shrink:与 “Expand” 相反,确保 UI 始终完整显示在屏幕上,即使会出现黑边。如果屏幕尺寸大于参考分辨率,UI 会缩小以适应屏幕;如果屏幕尺寸小于参考分辨率,UI 会保持原大小,周围出现黑边。

总之,画布是 Unity UI 系统的核心组件,它提供了一个容器和渲染环境,使开发者能够创建各种类型的用户界面。通过合理地设置画布的属性、组件和渲染模式,以及优化性能和处理事件,可以打造出高质量的游戏 UI。

### Unity 2022.3.6 版本相关信息 Unity 2022.3.6 是 Unity 游戏引擎的一个长期支持(LTS)版本,主要用于提供稳定性和兼容性。以下是关于该版本的下载链接、更新日志和使用指南的相关信息。 #### 下载链接 Unity 官方提供了 LTS 版本的下载入口,用户可以通过以下链接访问并下载 Unity 2022.3.6: - **官方下载页面**: [Unity Download Archive](https://unity.com/download/archive) [^1] 在该页面中,选择“2022.3.6f1”版本即可开始下载安装程序。 #### 更新日志 Unity 2022.3 系列的更新日志详细记录了每个补丁版本的改进和修复内容。根据引用中的信息,2022.3 系列版本引入了多项功能改进和性能优化,包括但不限于以下内容: - **设备模拟器**: 增加了对新设备的支持,并改进了设备列表管理功能[^3]。 - **包管理器**: 提供更稳定的依赖解析机制,减少因包冲突导致的问题。 - **UI Toolkit**: 改进了 UI 元素的渲染性能,并增强了对复杂布局的支持。 - **内存分析器**: 提升了内存泄漏检测的准确性,帮助开发者更好地优化资源使用。 具体到 2022.3.6 的更新日志,主要集中在修复已知问题和提升稳定性上。例如: - 修复了某些情况下 HybridCLR 的加载失败问题[^4]。 - 解决了 XAsset 资源管理器在多线程环境下的潜在崩溃问题。 #### 使用指南 对于 Unity 2022.3.6 的使用,官方文档是最佳的学习资源。以下是一些推荐的参考材料: - **官方文档**: 访问 [Unity Documentation](https://docs.unity3d.com/2022.3/Manual/index.html) 获取详细的使用说明和 API 参考[^1]。 - **学习资源**: 在 Unity 官网的“Learn”板块中,可以找到针对不同技能水平的教程和示例项目。 - **社区支持**: 如果遇到问题,可以前往 Unity Forum 或 Stack Overflow 寻求帮助。 此外,如果需要集成第三方工具(如 NGUI Next-Gen UI),可以参考其项目地址和文档进行配置[^2]。 ### 示例代码:检查 Unity 版本 以下是一个简单的脚本,用于在运行时检查当前使用的 Unity 版本是否为 2022.3.6: ```csharp using UnityEngine; public class VersionChecker : MonoBehaviour { void Start() { string currentVersion = Application.unityVersion; Debug.Log($"Current Unity Version: {currentVersion}"); if (currentVersion == "2022.3.6f1") { Debug.Log("This is the correct version!"); } else { Debug.LogWarning("Please ensure you are using Unity 2022.3.6f1."); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一然明月

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

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

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

打赏作者

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

抵扣说明:

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

余额充值