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

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。


http://www.kler.cn/a/290045.html

相关文章:

  • Linux系统编程多线程之条件变量和信号量讲解
  • docker构建jdk11
  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • MySQL技巧之跨服务器数据查询:进阶篇-从A数据库复制到B数据库的表中
  • JVM详解:JVM的系统架构
  • 计算机毕业设计Python+Neo4j知识图谱医疗问答系统 大模型 机器学习 深度学习 人工智能 大数据毕业设计 Python爬虫 Python毕业设计
  • ChatGPT辅助论文写作的七大场景
  • zdppy+vue3+onlyoffice文档管理系统实战 20240903 上课笔记 登录功能完成
  • 数字化转型工具有哪些 无锡振宁科技
  • Vue项目安装依赖(npm install)报错的解决
  • 2024大模型学习:机器学习在安全领域的应用|从大数据中识别潜在安全威胁
  • 设计模式之解释器模式
  • LeetCode51 N 皇后
  • github上传代码
  • 河南省第三届职业技能大赛 网络安全(世赛选拔)项目样题
  • 【C++模板初阶】
  • 新换了电脑,电脑里常用的6款软件,下载回来继续用
  • Driver.js——实现页面引导
  • OpenFeign深入学习笔记
  • MySQL之DQL简单查询
  • 光纤接口简介
  • 三根K线形态介绍
  • OceanBase V4.2解析:如何用迭代器 Generator快速生成任意数据
  • 【复旦微FM33 MCU 外设开发指南】外设篇3——SPI
  • day02 1.c++对c的扩充
  • 学习关系型数据库:在MAC下编译安装firebird