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

Unity UGUI(二)核心组件

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

相关文章:

Unity UGUI(二)核心组件

Unity Canvas相关知识学习 文章目录 Unity Canvas相关知识学习1. Canvas&#xff1a;1.1 Render Mode1.2 多个Canvas的显示顺序 2.Canvas Scaler&#xff1a;屏幕分辨率自适应2.1 UI Scale Mode 3. EventSystem4. Standalone Input Module5. Graphic Raycaster&#xff1a;图形…...

代码随想录二刷第二天(Python)

27. 移除元素 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/ 题目描述&#xff1a;给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必…...

Mybatis学习笔记1 Mybatis入门

差不多根据mybatis中文文档:创建第一个mybatismaven项目,将它跑起来 入门_MyBatis中文网 新建库 建表 创建项目 重启之后 配置下Maven与encoding 成习惯了 新建模块 注意:这个GroupId和ArtifactId version是之后,你用Maven install时候后存放的包路径和包名 目录结构:虽然换…...

Spark 管理和更新Hadoop token 流程

Hadoop Token 管理 AM 通过 kerberos authenticationAM 获取 Yarn 和 HDFS TokenAM send tokens to containersContainers load tokens Enable debug message log4j.logger.org.apache.hadoop.securityDEBUG AM Generate tokens Logs: 23/09/07 22:38:50,375 INFO [main]…...

Android文件关联

用户需求:Android在系统文件夹找到一个文件想发送自己开发的app进行处理该怎么办? 这时候可以采用两个Activity,一个Activity用作Launcher,一个用于处理发送的文件;具体Activity intent-filter该怎么写了?可以参考下面的代码: <intent-filter><action androi…...

java操作adb查看apk安装包包名【搬代码】

Testpublic static void findadb() throws InterruptedException {String apkip"E:\\需求\\2023\\gql_1.0.1.apk";String findname1"cmd /c cd E:\\appium\\android-sdk\\build-tools\\27.0.2";//没有进到这里String s1 Cmd.exeCmd(findname1);System.out…...

【JAVA】Object类与抽象类

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…...

【设计模式】二、UML 类图概述

文章目录 常见含义含义依赖关系&#xff08;Dependence&#xff09;泛化关系&#xff08;Generalization&#xff09;实现关系&#xff08;Implementation&#xff09;关联关系&#xff08;Association&#xff09;聚合关系&#xff08;Aggregation&#xff09;组合关系&#x…...

百望云亮相服贸会 重磅发布业财税融Copilot

小望小望&#xff0c;我要一杯拿铁&#xff01; 好的&#xff0c;已下单成功&#xff0c;请问要开具发票嘛&#xff1f; 在获得确认的指令后&#xff0c; 百小望AI智能助手 按用户要求成功开具了一张电子发票&#xff01; 这是2023年服贸会国家会议中心成果发布现场&#x…...

vue 项目代码混淆配置(自定义插件适用)带配置项注释

文章目录 vue 项目代码混淆配置&#xff08;自定义插件适用&#xff09;带配置项注释一、概要二、混淆步骤1. 引入混淆插件2. 添加混淆配置3. 执行代码混淆 vue 项目代码混淆配置&#xff08;自定义插件适用&#xff09;带配置项注释 一、概要 本文章适用 vue-cli3/webpack4 …...

手写Spring:第7章-实现应用上下文

文章目录 一、目标&#xff1a;实现应用上下文二、设计&#xff1a;实现应用上下文三、实现&#xff1a;实现应用上下文3.1 工程结构3.2 Spring应用上下文和Bean对象扩展类图3.3 对象工厂和对象扩展接口3.3.1 对象工厂扩展接口3.3.2 对象扩展接口 3.4 定义应用上下文3.4.1 定义…...

Java(三)逻辑控制(if....else,循环语句)与方法

逻辑控制&#xff08;if....else&#xff0c;循环语句&#xff09;与方法 四、逻辑控制1.if...else(常用)1.1表达格式&#xff08;三种&#xff09; 2.switch...case(用的少)2.1表达式 3.while(常用)3.1语法格式3.2关键字beak&#xff1a;3.3关键字 continue&#xff1a; 4.for…...

通过API接口实现数据实时更新的方案(InsCode AI 创作助手)

要实现实时数据更新&#xff0c;需要采用轮询或者长连接两种方式。 1. 轮询方式 轮询方式指的是客户端定时向服务器请求数据的方式&#xff0c;通过一定的时间间隔去请求最新数据。具体的实现方法包括&#xff1a; 客户端定时向服务器发送请求&#xff0c;获取最新数据&…...

分类预测 | MATLAB实现PCA-GRU(主成分门控循环单元)分类预测

分类预测 | MATLAB实现PCA-GRU(主成分门控循环单元)分类预测 目录 分类预测 | MATLAB实现PCA-GRU(主成分门控循环单元)分类预测预测效果基本介绍程序设计参考资料致谢 预测效果 基本介绍 Matlab实现基于PCA-GRU主成分分析-门控循环单元多输入分类预测&#xff08;完整程序和数据…...

el-dialog无法关闭

代码如下&#xff0c;:visible.sync"result2DeptVisible"来控制dialog的隐显问题&#xff0c;但当点击关闭的时候 &#xff0c;无法关闭&#xff01;&#xff01; <el-dialog :visible.sync"result2DeptVisible" class"el-dialog-view">&…...

MATLAB算法实战应用案例精讲-【大模型】LLM算法(最终篇)

目录 前言 知识储备 1).通讯原语操作: 2).并行计算技术: 算法原理...

Mac brew -v 报错 fatal: detected dubious ownership in repository

Mac 电脑查询 brew版本时报错&#xff0c;如下错误&#xff1a; Last login: Fri Sep 8 14:56:21 on ttys021 sunshiyusunshiyudeMacBook-Pro-2 ~ % brew -v Homebrew 4.0.3-30-g7ac31f7 fatal: detected dubious ownership in repository at /usr/local/Homebrew/Library/Ta…...

Docker镜像、容器、仓库及数据管理

使用Docker镜像 获取镜像 使用docker pull命令&#xff0c;使用docker search命令可以搜索远端仓库中共享的镜像。 运行容器 使用docker run [OPTIONS] IMAGE [COMMAND] [ARG...]命令&#xff0c;如&#xff1a;docker run --name ubuntu_test --rm -it ubuntu:test /bin/b…...

Java的选择排序、冒泡排序、插入排序

不爱生姜不吃醋 如果本文有什么错误的话欢迎在评论区中指正 与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 &#x1f334;前言&#x1f334;一、选择排序1.原理2.时间复杂度3.代码实现 &#x1f334;二、冒泡排序1. 原理2. 时间复杂度3.代码实现 &#x1f334;三…...

Vagrant + VirtualBox + CentOS7 + WindTerm 5分钟搭建本地linux开发环境

1、准备阶段 将环境搭建所需要的工具和文件下载好&#xff08;页面找不到可参考Tips部分&#xff09; Vagrant 版本&#xff1a;vagrant_2.2.18_x86_64.msi 链接&#xff1a;https://developer.hashicorp.com/vagrant/downloads VirtualBox 版本&#xff1a;VirtualBox-6.1.46…...

Spring_couplet_generation 构建RESTful API最佳实践

Spring_couplet_generation 构建RESTful API最佳实践 最近在做一个挺有意思的小项目&#xff0c;想把一个春联生成模型包装成服务&#xff0c;方便其他应用调用。这让我重新思考了如何把一个AI模型能力&#xff0c;通过API的方式&#xff0c;既规范又稳定地提供出去。相信不少…...

智慧树自动刷课插件:三步实现网课自动化学习的完整指南

智慧树自动刷课插件&#xff1a;三步实现网课自动化学习的完整指南 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台冗长的网课视频而烦恼吗&#xff1…...

Flutter集成鸿蒙适配三方库:基础级鸿蒙应用开发实践案例

Flutter集成鸿蒙适配三方库&#xff1a;基础级鸿蒙应用开发实践案例 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 本文聚焦基础级开发场景&#xff0c;以“Flutter搭建鸿蒙应用集成鸿蒙适配版三方库”为核心&#xff0c;提供一步一操作…...

VideoAgentTrek-ScreenFilter在Dify平台上的低代码应用构建

VideoAgentTrek-ScreenFilter在Dify平台上的低代码应用构建 1. 引言 想象一下&#xff0c;你手头有一堆视频素材&#xff0c;可能是会议录屏、产品演示&#xff0c;或者是一些随手拍的教程。这些视频里&#xff0c;往往夹杂着大量无关的桌面背景、浏览器标签页&#xff0c;甚…...

【仅限高级Java架构师查阅】Java外部函数安全沙箱构建指南:禁用dlopen/dlsym、符号白名单校验、Rust FFI桥接实践(含SPI自定义ClassLoader隔离方案)

第一章&#xff1a;Java外部函数优化Java外部函数接口&#xff08;Foreign Function & Memory API&#xff0c;即JEP 454/459/460/461/462&#xff09;自JDK 22起正式成为标准特性&#xff0c;为Java与本地代码&#xff08;如C/C库&#xff09;的高效互操作提供了零拷贝、类…...

KDD_CUP99数据集预处理与模型性能验证(附处理代码与数据集)

1. KDD_CUP99数据集入门指南 第一次接触KDD_CUP99数据集时&#xff0c;我也被它庞大的数据量和复杂的特征结构吓了一跳。这个数据集是网络安全领域最经典的入侵检测基准数据集之一&#xff0c;包含了模拟军事网络环境中各种攻击类型的网络连接记录。原始数据集有近500万条记录&…...

Z-Image-GGUF惊艳效果:运动模糊、景深虚化、镜头畸变等摄影级效果模拟

Z-Image-GGUF惊艳效果&#xff1a;运动模糊、景深虚化、镜头畸变等摄影级效果模拟 1. 项目简介&#xff1a;当AI学会“拍照” 想象一下&#xff0c;你告诉AI&#xff1a;“给我一张黄昏时分&#xff0c;一个女孩在樱花树下奔跑的照片&#xff0c;要有那种风吹过发丝的动感&am…...

OpenClaw多语言支持:Qwen2.5-VL-7B跨语种图文处理技巧

OpenClaw多语言支持&#xff1a;Qwen2.5-VL-7B跨语种图文处理技巧 1. 为什么需要多语言图文处理 上周我收到一份混合了英文技术文档和中文注释的项目资料&#xff0c;需要整理成统一格式的双语对照版本。手动复制粘贴到翻译工具再调整排版&#xff0c;花了我整整三个小时。这…...

气象数据可视化实战:从雷达图到三维风场,前端技术栈全解析

气象数据可视化实战&#xff1a;从雷达图到三维风场&#xff0c;前端技术栈全解析 气象数据的可视化一直是前端开发领域最具挑战性的方向之一。想象一下&#xff0c;当你需要将每小时更新的全球气象数据转化为直观的动态图像&#xff0c;让气象学家一眼就能看出台风路径、让飞行…...

万象视界灵坛实操案例:博物馆数字藏品图像‘青铜器’‘唐三彩’‘水墨画’三级语义识别

万象视界灵坛实操案例&#xff1a;博物馆数字藏品图像青铜器唐三彩水墨画三级语义识别 1. 项目背景与价值 在博物馆数字化进程中&#xff0c;如何准确识别和分类各类文物图像是一个重要课题。传统基于标签的分类系统往往难以捕捉文物深层的艺术风格和文化内涵。 万象视界灵坛…...