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.rhkb.cn/news/416420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统编程--信号

这里写目录标题 信号的概念特点二级目录二级目录 信号的产生二级目录二级目录二级目录 信号集操作函数二级目录二级目录二级目录 信号捕捉二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 信号的概念 特点 注意&#xff1a;所有信号的产生及其处理都是内核完成&am…

开源项目管理工具Taiga

什么是 Taiga &#xff1f; Taiga 是一个免费开源&#xff0c;而且功能非常强大的项目管理平台&#xff0c;用于初创企业和敏捷开发团队。Taiga 专注于简洁性&#xff0c;并且界面很干净简单。Taiga 也非常个性化&#xff0c;并集合了很多其它功能和外部工具&#xff0c;还有大…

一文讲清楚你既熟悉又陌生的:虚拟现实技术(VR)

文章目录 一、基本概念二、核心组件1. 硬件设备2. 软件系统 三、技术原理四、虚拟现实系统的分类1. 桌面式虚拟现实2. 沉浸式虚拟现实3. 增强式虚拟现实4. 分布式虚拟现实 五、应用领域1. 游戏和娱乐2. 教育3. 心理治疗4. 社交和会议5. 医疗6. 房产地产7. 城市规划8. 航天军工9…

2024.9.4

#include <iostream> #include <cstring> using namespace std;template<typename T> class Stack { private:int len;int count 0;T *stack; public:Stack():len(10) //无参构造{stack new T[len];stack[len] {0};}Stack(int len):len(len) …

MACOS安装配置前端开发环境

官网下载安装Mac版本的谷歌浏览器以及VS code代码编辑器&#xff0c;还有在App Store中直接安装Xcode&#xff08;里面自带git&#xff09;&#xff1b; node.js版本管理器nvm的下载安装如下&#xff1a; 参考B站&#xff1a;https://www.bilibili.com/video/BV1M54y1N7fx/?sp…

使用 Vue3 Element Plus 实现el-table中的特定单元格编辑,下拉选择等

效果预览 完整代码(后面有解析) <template><div style="display: flex;align-items: center;justify-co

海绵城市雨水监测系统

海绵城市雨水监测系统主要有&#xff1a;数据采集、无线数据传输、后台云服务、终端平台显示等部分组成。系统通过前端数据采集水质&#xff08;ss\cod\浊度、PH等&#xff09;、雨水雨量、流量、水位、土壤湿度、气象等数据。通过无线数据传输通讯&#xff08;4G、5G、以太网、…

【Unity】简单机甲运动系统——坦克式操控方式

最近两天想做一个人形机甲的游戏&#xff0c;由于本人又是一个拟真军事爱好者&#xff0c;不太喜欢机动特别高的&#xff0c;所以打算参考坦克类游戏来制作一个脚&#xff01;踏&#xff01;实&#xff01;地&#xff01;的机甲游戏 这个运动系统基本实现了逻辑和动画的分离&a…

低代码用户中心的构建与应用

引言 在现代软件开发中&#xff0c;低代码平台因其高效、灵活、用户友好的特性而逐渐受到青睐。特别是在用户中心的构建方面&#xff0c;低代码平台能够显著提升开发效率&#xff0c;降低开发成本。本文将探讨如何利用低代码平台构建一个高效的用户中心&#xff0c;并分享一些…

002:显示DICOM图像(替换掉 vtkImageViewer2 )

VTK 医学图像处理---DICOM图像显示 对第一个DICOM显示例子的展开&#xff08;替换掉vtkImageViewer2类&#xff09; 两个例子实现的效果对比&#xff0c;其中右侧是对第一个例子展开后的显示效果&#xff0c;展示了一个完整的VTK渲染管线的过程。 目录 VTK 医学图像处理---DIC…

神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?

本文将介绍&#xff0c;ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。 客户遇到的问题 ClkLog的用户访问基础统计分析功能是基于神策SDK的全埋点来实现的。 我们遇到有些客户是使用C、C#等语言来开发的客户端&#xff0c;然而神策此类SDK&#xff08;如C, C…

[B站大学]Zotero7教程

参考资料: https://www.bilibili.com/video/BV1PSvUetEQX 2. 账号注册与同步 本节内容参考zotero中文社区文档&#xff1a;https://zotero-chinese.com/user-guide/sync 2.1 数据同步 首先注册一个Zotero官方账户。登录账号密码。 2.2 文件同步 按照文档&#xff0c;推荐…

快消品渠道开发方案,让你拥有源源不断的批发客户!

对于快消品行业来说&#xff0c;优质批发渠道客户&#xff0c;决定了你产品的销量。这篇文章&#xff0c;和大家分享下&#xff0c;如何开发渠道端客户&#xff01; 1、分析目标市场 首先&#xff0c;分析快消品行业的趋势&#xff0c;以及你们的产品&#xff0c;目前市场占有…

Java-线程的生命周期7大状态

在 Java 中&#xff0c;线程的生命周期可以分为多个状态&#xff0c;这些状态描述了线程从创建到终止的整个过程。Java 线程的生命周期主要包括以下七大状态&#xff1a; 1.新建状态&#xff08;New&#xff09; 当一个线程对象被创建但尚未调用 start() 方法时&#xff0c;线…

Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化

引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本&#xff0c;围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程&#xff0c;希望通过这篇文档&#xff0c;对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文章将会分成三篇&#xff0c;从以下方向给大家介绍&am…

鸿蒙(API 12 Beta6版)图形【使用Drawing实现图形绘制与显示 (C/C++)】方舟2D图形服务

场景介绍 Native Drawing模块提供了一系列的接口用于基本图形和字体的绘制。 Drawing绘制的内容无法直接在屏幕上显示&#xff0c;需要借用XComponent以及Native Window的能力支持&#xff0c;将绘制的内容通过Native Window送显。 接口说明 Drawing常用接口如下表所示。 …

二分查找:手拿把掐!------Java代码实现

“没有天赋,那就不断重复.” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;模板一:(最基本的)**左闭右闭:** [left,right] 模板二:**左闭右开区间模板:**区间:左闭右开[left,right): 模板三:开区间模板:(left,right) 循环不变量:二分查找易错点:做题经验:疑问及解答&…

内衣内裤衣机什么牌子好?五款口碑爆棚王炸机型推荐

如今科技是越来越发展了&#xff0c;迷你洗衣机的功能也是越来越强大了&#xff0c;这样小户型的家庭甚是喜爱&#xff0c;不仅解决了清洗衣物的问题&#xff0c;还能让小型洗衣机在家中起到一定的装饰效果。在清洁衣物的污渍的同时&#xff0c;还能有效除去衣物上的各种细菌。…

upload-labs闯关攻略

pass-1 提前准备好的一个PHP木马&#xff0c;然后将后缀名改为jpg上传 然后在上传的过程中利用抓包&#xff0c;将抓取到的包里面的后缀jpg改为php如图所示&#xff0c;然后放行 接着我们去访问上传的图片信息&#xff0c;如下图所示就为成功 pass-2 提前准备好的一个PHP木马…

http连接处理(最新版)

分析http类及请求接收 基础 epoll epoll_create函数 #include <sys/epoll.h> int epoll_create(int size) 创建一个指示epoll内核事件表的文件描述符&#xff0c;该描述符将用作其他epoll系统调用的第一个参数&#xff0c;size不起作用。 epoll_ctl函数 #include …