Unity UGUI(二)核心组件

news2025/2/25 18:05:06

Unity Canvas相关知识学习


文章目录

  • Unity Canvas相关知识学习
    • 1. Canvas:
      • 1.1 Render Mode
      • 1.2 多个Canvas的显示顺序
    • 2.Canvas Scaler:屏幕分辨率自适应
      • 2.1 UI Scale Mode
    • 3. EventSystem
    • 4. Standalone Input Module
    • 5. Graphic Raycaster:图形射线投射器


1. Canvas:

UI元素的容器,合批最小单位,2D模式,3D模式。

1.1 Render Mode

UI 在屏幕上或作为 3D 空间对象进行渲染的方式。

1)Screen Space - Overlay:在此模式下,画布会进行缩放来适应屏幕,然后直接渲染而不参考场景或摄像机(即使场景中根本没有摄像机,也会渲染 UI)。如果更改屏幕的大小或分辨率,则 UI 将自动重新缩放进行适应。UI 将绘制在所有其他图形(例如摄像机视图)上。
在这里插入图片描述

  • Canvas总是在绘制完其它物体后,最后进行绘制,所以Canvas会覆盖在所有物体之上。
  • Canvas的大小和位置无法通过手动设置, 大小只能和屏幕大小一致, 位置总是处于屏幕正中间。
  • 根据CanvasScaler组件的设置, 最终确定Canvas的大小,如果没有CanvasScaler,此时Canvas的一个像素等于一个Units。
  • 此模式的Canvas节点下的3D物体不会显示。

2)Screen Space - Camera:在此模式下,UI画布会固定在渲染相机前方。通过调整 Plane Distance 来改变画布与相机的距离。此时画布始终会重新缩放来准确适应摄像机视锥体。如果更改屏幕的大小或分辨率或更改摄像机视锥体,则 UI 将自动重新缩放进行适应。场景中比 UI 平面更靠近摄像机的所有 3D 对象都将在 UI 前面渲染,而平面后的对象将被遮挡。
在这里插入图片描述
3)World Space:此模式将 UI 视为场景中的平面对象进行渲染。但是,与 Screen Space - Camera 模式不同,该平面不需要面对摄像机,可以任意定向。画布的大小可以使用矩形变换来设置,但画布在屏幕上的大小将取决于摄像机的视角和距离。其他场景对象可以位于画布后面、穿透画布或位于画布前面。

1.2 多个Canvas的显示顺序

  • 渲染模式为 Screen Space - Overlay 的始终在最前面。
  • SortingLayer越大的显示越靠前。
  • SortingLayer相同,SortOrder越大的显示越靠前。
  • SortingLayer和SortOrder都相同,Z坐标越小的(距离相机越近)的越靠前。
  • Z坐标,SortingLayer和SortOrder都相同,受在Hierarchy窗口中的层级关系影响,层级越靠下显示越靠前。

2.Canvas Scaler:屏幕分辨率自适应

用于控制 Canvas 画布中 UI 元素的整体缩放和像素密度。此缩放会影响画布下的所有内容。

2.1 UI Scale Mode

确定画布中的 UI 元素的缩放方式。

1) Screen Space 模式下
在这里插入图片描述
Constant Pixel Size:无论屏幕大小如何,UI 元素都保持相同像素大小。
Scale Factor:按此系数缩放画布中的所有 UI 元素。
Reference Pixels Per Unit:canvas中每一个单位对应的像素数,通常100像素对应Unity中的一个单位。
在这里插入图片描述
Scale With Screen Size:根据某个缩放因子,等比缩放画布,Canvas下的UI元素也会受到影响。
Reference Resolution:UI 布局的设计分辨率。如果屏幕分辨率(实际设备分辨率)较大,则 UI 会放大,如果较小,则 UI 会缩小。
Screen Match Mode:屏幕适配模式

  1. Match Width or Height:以宽度、高度或二者的线性插值作为参考来缩放画布区域。
  2. Expand:扩展模式,选择宽高比中较小的缩放因子进行缩放。可以显示全部UI,画布中多出来的空白像素用固定颜色填充。
  3. Shrink:裁剪模式,选择宽高比中较大的缩放因子进行缩放。会有一部分UI被裁剪。

Match:以宽度比、高度比或二者的线性插值作为参考进行缩放。
Reference Pixels Per Unit:每单位像素数。

Constant Physical Size:无论屏幕大小和分辨率如何,UI 元素都保持相同的物理大小。
用于解决不同设备上(DPI不同)同一个UI大小不同的问题。
在这里插入图片描述

Physical Unit: 用于指定位置和大小的物理单位。
在这里插入图片描述

Fallback Screen DPI:在屏幕 DPI 未知时采用的 DPI。
Default Sprite DPI:用于精灵的每英寸像素,使其“Pixels Per Unit”设置与“Reference Pixels Per Unit”设置匹配。
Reference Pixels Per Unit:如果精灵具有此“Pixels Per Unit”设置,则其 DPI 将与“Default Sprite DPI”设置匹配。

2) World Space 模式下
Dynamic Pixels Per Unit: 用于 UI 中动态创建的位图(如文本)的每单位像素量。
Reference Pixels Per Unit: 每单位像素数。

3. EventSystem

  • 负责Tick整个事件系统。
  • 负责管理所有的输入事件,并将其分派给正确的GameObject。
  • 一个场景中只能有一个EventSystem组件,创建UI时如果没有EventSystem则自动创建一个。

在 Editor 中 EventSystem 对象的 Inspector 窗口可以查看:当前选中对象(Selected),以及鼠标左右键的输入信息(Pointer -1 和 Pointer -2)等信息。

4. Standalone Input Module

  • 继承 BaseInputModule。
  • 由EventSystem 管理和驱动 。
  • 处理不同类型的输入(例如鼠标、触摸屏等)并生成对应的事件 。

InputModule 主要在 Process() 函数中处理用户输入事件。
以 touch 为例:Process主要的工作就是维护 PointerEventData 的数据(点击位置,当前位置,点击时间、上一帧的 delta值等),同时根据 PointerEventData 发出事件(Click、Drag)。
在这里插入图片描述

5. Graphic Raycaster:图形射线投射器

  • 如果UI需要接受点击事件,需要在UI所在的 Canvas 上添加 GraphicRaycaster 组件。
  • 所有可交互UI元素都继承自 UIBehaviour 并勾选 Raycast Target,才能够接收和处理相应类型的输入事件。
  • 检测时获取当前射线击中的所有物体,统一进行排序,选择排序后的第一个对象作为射线检测的结果。
  • 依赖 RectTranform 的矩形框来进行射线检测, 不需要摄像机。
  • 根据Canvas的层级和UI的深度depth进行排序。
// EventSystem.cs
public void RaycastAll(PointerEventData eventData, List<RaycastResult> raycastResults)

// s_RaycastComparer 排序方法
private static int RaycastComparer(RaycastResult lhs, RaycastResult rhs)

// GraphicRaycaster.cs  
public override void Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList)

UGUI事件系统原理:

流程:事件输入–>射线投射–>事件分发
在这里插入图片描述
InputModule 获取用户的操作数据,Raycaster 则找到目标对象并通知 EventSystem,最后由EventSystem 发送事件让目标对象进行响应,处理对应的事件。

Unity提供了一系列事件处理接口,它们继承自 IEventSystemHandler 。每次分发事件时查询目标对象上实现了
IEventSystemHandler 接口的所有组件, 然后向这些组件进行消息分发。

UGUI支持的事件:https://docs.unity.cn/cn/current/Manual/SupportedEvents.html

核心源码:ExecuteEvents.cs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创邻科技图数据库课程走进一流高校

《图数据库原理和实践》 正式开课&#xff01; 最近&#xff0c;浙江大学计算机学院新开了一门名为 《图数据库原理和实践》 的新课程&#xff0c;该课程由创邻科技和浙江大学联合推出&#xff0c;吸引了许多学生踊跃参与&#xff01; 曾为浙大学子的创邻科技CTO周研博士作为…

「Java开发指南」在MyEclipse中的Spring开发(一)

MyEclipse v2023.1.2离线版下载(Q技术交流&#xff1a;742336981&#xff09; 1. 什么是Spring&#xff1f; 在MyEclipse中引入Spring比大多数框架更难&#xff0c;因为它不是一种单一用途的技术。Spring被认为是Java软件开发在几乎每个领域都有最佳实践的巨大框架&#xff0…

canvas绘制渐变色三角形金字塔

项目需求:需要绘制渐变色三角形金字塔,并用折线添加标识 (其实所有直接用图片放上去也行,但是ui没切图,我也懒得找她要,正好也没啥事,直接自己用代码绘制算了,总结一句就是闲的) 最终效果如下图: (以上没用任何图片,都是代码绘制的) 在网上找了,有用canvas绘…

sql server 查询某个字段是否有值 返回bool类型

sql server 查询某个字段是否有值 返回bool类型&#xff0c;true 或 false SELECT ColumnCode,CONVERT(BIT,CASE WHEN LEN(ColumnCode) > 0 THEN 1 ELSE 0 END) AS HasValue FROM dbo.TF_LessonCatalog

Java(一)安装并使用 java(Windows)

安装并使用java 前言一、初识Java1.Java的安装1.1下载JDK1.2JDK安装与使用1.2.1安装1.2.2 IDEA&#xff08;编译器&#xff09;使用 2.Java运行编程逻辑&#xff08;重要后面要用&#xff09;总结 前言 学习很重要&#xff0c;复习也很重要&#xff0c;对于编程语言的复习更为…

初试小程序轮播组件

文章目录 一、轮播组件&#xff08;一&#xff09;swiper组件1、功能描述2、属性说明 &#xff08;二&#xff09;swiper-item组件1、功能描述2、属性说明 二、案例演示&#xff08;一&#xff09;运行效果&#xff08;二&#xff09;实现步骤1、创建小程序项目2、准备图片素材…

Azure + React + ASP.NET Core 项目笔记一:项目环境搭建(二)

有意义的标题 pnpm 安装umi4 脚手架搭建打包语句变更Visual Studio调试Azure 设置变更发布 pnpm 安装 参考官网&#xff0c;或者直接使用npm安装 npm install -g pnpmumi4 脚手架搭建 我这里用的umi4&#xff0c;官网已附上 这里需要把clientapp清空&#xff0c;之后 cd Cl…

构建普适通用的企业网络安全体系框架

在当今数字化时代&#xff0c;网络安全已成为企业保护信息资产和业务运行的重要任务。恶意攻击、数据泄露、网络病毒等威胁不断演进&#xff0c;给企业和个人带来了巨大风险。为了应对这一挑战&#xff0c;许多企业已经采取了一系列网络安全措施&#xff0c;如制定了网络安全政…

Nacos:Spring Cloud Alibaba服务注册与配置中心

Nacos 英文全称为 Dynamic Naming and Configuration Service&#xff0c;是一个由阿里巴巴团队使用 Java 语言开发的开源项目。 Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台&#xff08;参考自 Nacos 官网&#xff09;。 Nacos 的命名是由 3 部…

系统架构设计师(第二版)学习笔记----嵌入式系统及软件

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…

ubuntu20.04 Supervisor 开机自启动脚本一文配置

前言: 最近发现一种非常好的开机启动服务方式,不光可以开机自启动,而且还可以进行开机节点的进程守护,这样大大确保了线程的稳定情况,这种服务甚至可以守护开机的进程,所以比之前设置 rc.local 开机自启动脚本一文配置节点好出很多,它甚至可以使用网页登录监管我开机自启…

RabbitMQ: 死信队列

一、在客户端创建方式 1.创建死信交换机 2.创建类生产者队列 3.创建死信队列 其实就是一个普通的队列&#xff0c;绑定号私信交换机&#xff0c;不给ttl&#xff0c;给上匹配的路由&#xff0c;等待交换机发送消息。 二、springboot实现创建类生产者队列 1.在消费者里的…

OpenText EnCase Endpoint Security 识别潜在的网络安全威胁并快速消灭威胁

如今&#xff0c;敏感数据丢失和 IT 系统中断是各类组织面临的最大危机。网络攻击频率不断攀升、修复成本日益增加以及响应时间延长都加剧了数据丢失的隐患。 OpenText EnCase Endpoint Security 的高效体现在能够加速检测恶意活动&#xff0c;并在其导致不可挽回的损失或丢失敏…

SpringSecurity OAuth2 配置 token有效时长

1.这种方式配置之后,并没有生效 package com.enterprise.auth.config;import com.enterprise.auth.handler.OAuthServerWebResponseExceptionTranslator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bea…

2023国赛数学建模B题思路代码 - 多波束测线问题

# 1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到…

java文件命令行报错: 找不到或无法加载主类XXX报错及解决

前言 之前遇到过几次&#xff0c;后面稀里糊涂的解决了。今天详细记录一下&#xff0c;可能不全或有些错误&#xff0c;还请各位指正。 你要启动一个类的话首先要有类。 在这里&#xff0c;类有两种&#xff0c; 一个是带包名&#xff08;package&#xff09;的还有一个是没包…

lvs负载均衡、

四&#xff1a;LVS集群部署 lvs给nginx做负载均衡项目 218lvs yum -y install ipvsadm 设置VIP 定义策略 ipvsadm -C //清空现有规则 -A增加虚拟服务器记录 -D删除虚拟服务器记录 -L查看 150web-111 配置好网站服务器&#xff0c;测试所有RS [nginx-stable] namengin…

网络原理(二)TCP的可靠传输

网络原理&#xff08;一&#xff09;目录 网络原理应用层传输层先说UDP&#xff08;不可靠传输&#xff09;重点说明&#xff34;&#xff23;&#xff30;&#xff08;可靠传输&#xff09;一、确认应答二、超时重传三、链接管理建立连接断开链接 四、滑动窗口五、流量控制&am…

性能指标都不了解,如何做性能测试?

1、性能指标在性能测试的作用&#xff1f; 性能指标在性能测试中起着非常重要的作用&#xff0c;它们帮助我们评估和了解系统的性能表现。下面用通俗易懂的话来解释性能指标的作用和意义&#xff1a; 帮助我们了解系统的处理能力&#xff1a;性能指标可以告诉我们系统在给定负…

目标检测评估指标mAP:从Precision,Recall,PR曲线到AP

1. TP, FP, FN, TN True Positive 满足以下三个条件被看做是TP 1. 置信度大于阈值&#xff08;类别有阈值&#xff0c;IoU判断这个bouding box是否合适也有阈值&#xff09; 2. 预测类型与标签类型相匹配&#xff08;类别预测对了&#xff09; 3. 预测的Bouding Box和Ground …