Unity开发——CanvasGroup组件介绍和应用

CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。

一、常用属性的解释

1、alpha控制UI的透明度

类型:float,0.0 ~1.0,

其中 0.0 完全透明,1.0 完全不透明。

通过调整alpha值可以实现UI的淡入淡出效果,可以参考本人的另一篇文章:

Unity功能——设置提示面板的显示与掩藏

2、blocksRaycasts:控制UI是否阻挡射线(Raycasts)

(1)类型:bool,true/false,

(2)true时会阻挡射线,false时不会阻挡射线。

(3)用户不对该UI后面的UI进行射线检测,可将值设置为true;

3、interactable:控制UI是否可交互(如点击、拖动等)

(1)类型:bool,true/false,

(2)true时会响应用户输入,false时将忽略用户输入。

(3)用户不对该UI进行交互,可将值设置为false;

4、ignoreParentGroups:控制UI是否忽略父级CanvasGroup的设置

(1)类型:bool,true/false,

(2)true时将忽略其父级CanvasGroup的alpha和interactable设置,false时会受到父级CanvasGroup的设置影响。

(3)用户要独立控制UI的透明度和交互性,可将值设置为true;

二、组件的alpha属性和UI的alpha属性的异同

1、相同点:

在视觉上是一样的,都可控制UI能不能被用户看到,也仅是控制物体的不透明度;

在交互上,都不会影响UI的交互性,都可正常进行交互事件;

在射线检测上,也都不会改变UI对射线的阻挡特性;

2、不同点:
(1)作用范围不同

直接设置 UI 元素的alpha值,只会影响该单个UI元素的透明度,其父子元素不会受到影响。

而CanvasGroup组件可以控制其所在UI及其所有子对象的透明度。组件所在的UI对象以及它包含的所有子物体(如按钮、文本框等)都会统一改变透明度。

(2)性能影响不同

直接设置单个UI的alpha值,性能开销相对较小,因为只涉及到对单个对象的属性修改。

当使用CanvasGroup时,会影响多个子对象,Unity需要处理更多的渲染和交互状态更新,

性能开销相对较大,尤其是在子对象数量较多的情况下。不过,在大多数正常场景下,这种开销通常是可以接受的。

三、组件的alpha属性和UI的visible属性的异同

1、相同点:

在视觉上是一样的,都可控制UI能不能被用户看到;

2、不同点:
(1)直接设置UI的visible值为false后,UI将完全不响应任何事件;

因为visible为false,背包及其内部子物体都不会被渲染出来,更不会被交互;

(2)而通过设置CanvasGroup组件的alpha值,只是影响视觉效果,不影响事件交互。

即使aplha值为0,对UI及其子物体的拖拽移动,修改等任何事件都会正常执行​

四、(重点)blocksRaycasts和interactable之间的区别和使用场景

下面提到的自身,包括挂载组件的UI以及UI内部的其他子对象。

1、异同

相同:都会影响UI自身的交互;

不同:

Interactable是影响(自身的)输入事件,影响交互状态;

BlocksRaycasts是影响(自身和自身以外后面的UI的)射线事件,影响射线检测状态。

2、使用环境

以背包面板为例,

(1)状态说明如下:

1)仅背包上挂载CanvasGroup组件;

2)可通过键盘输入事件,往背包内部物品格里增减物品

3)背包物品格里的物品背包后面的物品X都能进行鼠标点击移动操作时,

4)点击重叠,通常会优先处理最上层的元素:物品>物品格>背包>物品X

4)由于背包的visible值为false,完全不响应任何事件,

而CanvasGroup组件的alpha值只影响视觉效果,不影响任何用户事件。

若visible为false,无论CanvasGroup设置什么样,物体X怎么也不会被背包遮挡,能被射线检测到,可被鼠标拖动。

故这里默认背包的visible值为true,通过CanvasGroup的alpha值控制背包显示掩藏

(2)情况分析:
1)Interactable为true,BlocksRaycasts为true:

Interactable为true,

表示背包及子物体的交互事件可正常执行,鼠标键盘事件背包及子物体都可被接收。

blocksRaycasts为true:

在检测鼠标点击时,射线会首先命中背包面板,鼠标点击事件会优先被背包面板接收并处理,而不会触发后面物体 X 的点击拖动事件。

无论alpha值是不是为0,背包面板是不是不可见,都会认为背包面板仍然存在并会阻挡射线,交互逻辑上优先响应背包面板

故鼠标点击背包/物品X:

背包面板可被鼠标拖动;背包里的物品也可以正常被鼠标移动;

也可正常通过键盘事件,往内部物品格里进行增减物品;

物体X被背包遮挡,不会被射线检测到,无法被鼠标拖动;

2)Interactable为true,BlocksRaycasts为false:

interactable为true,

表明背包及其子元素,理论上可以接受交互事件;

但blocksRaycasts为false,

背包面板不会阻挡射线检测,射线会直接穿透背包面板,命中其后面的物体X。

无论alpha值是不是为1,背包面板是不是可见,交互逻辑上只响应物体X的射线检测事件,

不过键盘的事件不是由射线检测判断触发,背包里的物品正常接收键盘事件;

故鼠标点击背包/物品X:

背包面板不能被鼠标拖动;背包里的物品无法被鼠标移动;

但可正常通过键盘事件,往内部物品格里进行增减物品;

物体X不会被背包遮挡,可以被射线检测到,被鼠标拖动;

3)Interactable为false,BlocksRaycasts为true:

blocksRaycasts为true

在检测鼠标点击时,射线会首先命中背包面板,鼠标点击事件会优先被背包面板接收并处理,而不会触发后面物体 X 的点击拖动事件。

但Interactable为false

背包及其子元素的交互层面被设置为不可用状态,背包上的任何交互事件都不会被接受触发。

因此背包子物体的键盘事件不会被触发;同时即使背包及其子物体接收了鼠标的射线检测,也不会触发鼠标事件。

故鼠标点击背包/物品X:

背包面板不能被鼠标拖动;背包里的物品无法被鼠标移动;

通过键盘事件,也不能往内部物品格里进行增减物品;

物体X会被背包遮挡,不会被射线检测到,无法被鼠标拖动;

4)Interactable为false,BlocksRaycasts为false:

blocksRaycasts为false

背包面板不会阻挡射线检测,射线会直接穿透背包面板,命中其后面的物体X。交互逻辑上只响应物体X的射线检测事件。

Interactable为false

背包及其子元素的交互层面被设置为不可用状态,背包上的任何交互事件都不会被接受触发。

因此背包和子物体的鼠标事件,以及子物体的键盘事件都不会被触发。

故鼠标点击背包/物品X:

背包面板不能被鼠标拖动;背包里的物品无法被鼠标移动;

通过键盘事件,也不能往内部物品格里进行增减物品;

物体X不会被背包遮挡,可以被射线检测到,被鼠标拖动;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习笔记-进阶(7)字符串函数3

1. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1中第⼀次出现的位置&#x…

如何利用数字校园平台提升职业竞争力

现在我们来探讨如何借助数字校园平台来增强自身的职业竞争力。当今之时代,技术与数据堪称热门领域,略懂编程语言及数据分析,于求职之际,实能增添诸多优势! 首先,咱们得说说编程语言。现在很多学校都有提供在…

使用 Arduino 的 WiFi 控制机器人

使用 Arduino 的 WiFi 控制机器人 这次我们将使用 Arduino 和 Blynk 应用程序制作一个 Wi-Fi 控制的机器人。这款基于 Arduino 的机器人可以使用任何支持 Wi-Fi 的 Android 智能手机进行无线控制。 为了演示 Wi-Fi 控制机器人,我们使用了一个名为“Blynk”的 Android 移动应…

动态ip和静态ip适用于哪个场景?有何区别

在数字化浪潮席卷全球的今天,IP地址作为网络世界的“门牌号”,其重要性不言而喻。然而,面对动态IP与静态IP这两种截然不同的IP分配方式,许多用户往往感到困惑:它们究竟有何区别?又分别适用于哪些场景呢&…

求最大公约数【C/C++】

大家好啊,欢迎来到本博客( •̀ ω •́ )✧,我将带领大家详细的了解最大公约数的思想与解法。 一、什么是公约数 公约数,也称为公因数,是指两个或多个整数共有的因数。具体来说,如果一个整数能被两个或多个整数整除&…

conda 配置新环境时package will be install 和 package will be download 的区别

install 和 download 的区别 package will be downloaded下的包:这一类显示的是需要从 conda 仓库或其他指定的源下载的软件包。这些软件包通常是 .tar.bz2、.tar.xz 或 .conda 格式的压缩包。这些包会被下载到本地缓存目录(通常是 ~/.conda 或 C:\Users…

【2025小黑课堂】计算机二级WPS精选系列20G内容(可下载:真题+预测卷+软件+选择题)

2025年3月全国计算机等级考试即将于3月29日至31日举行。为了帮助广大考生高效备考,小编特意收集并整理了最新版(备考2025年3月)的小黑课堂计算机二级WPS 电脑题库软件,助力考生在考试中游刃有余,轻松通关! …

C++编写Redis客户端

目录 安装redis-plus-plus库 ​编辑 编译Credis客户端 redis的通用命令使用 get/set exists del keys expire /ttl type string类型核心操作 set和get set带有超时时间 set带有NX string带有XX mset mget getrange和setrange incr和decr list类型核心操作…

①EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器

EtherCAT转Modbus485RTU网关多路同步高速采集无需编程串口服务器https://item.taobao.com/item.htm?ftt&id798036415719 型号 1路总线EC网关 MS-A2-1011 2路总线EC网关 MS-A2-1021 4路总线EC网关 MS-A2-1041 EtherCAT 串口网关 EtherCAT 转 RS485 技术规格 …

C++ Primer 交换操作

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

TDengine 服务无法启动常见原因

taosd 是 TDengine 的核心服务进程,如果无法启动将导致整个数据库无法使用,了解常导致无法启动的原因,可以帮你快速解决问题。 1. 如何查找日志 无法启动的原因记录在日志中,日志文件默认在 /var/log/taos 的 taosdlog.0 或者 t…

一周学会Flask3 Python Web开发-SQLAlchemy连接Mysql数据库

锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili app.py下,我们先配置数据库连接,然后写一个简单sql测试。 连接配置,包括用户名&#xff…

【NLP 32、文本匹配任务 —— 深度学习】

大劫大难以后,人不该失去锐气,不该失去热度,你镇定了却依旧燃烧,你平静了却依旧浩荡,致那个从绝望中走出来的自己,共勉 —— 25.1.31 使用深度学习在文本匹配任务上主要有两种方式:① 表示型 ②…

打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手

DeepSeek AI 聊天助手集成指南 先看完整效果: PixPin_2025-02-19_09-15-59 效果图: 目录 项目概述功能特点环境准备项目结构组件详解 ChatContainerChatInputMessageBubbleTypeWriter 核心代码示例使用指南常见问题 项目概述 基于 Vue 3 TypeScrip…

2008-2024年中国手机基站数据/中国移动通信基站数据

2008-2024年中国手机基站数据/中国移动通信基站数据 1、时间:2008-2024年 2、来源:OpenCelliD 3、指标:网络类型、网络代数、移动国家/地区、移动网络代码、区域代码、小区标识、单元标识、坐标经度、坐标纬度、覆盖范围、测量样本数、坐标…

开源订货系统哪个好 三大订货系统源码推荐

在数字化转型加速的今天,企业对订货系统的需求日益增长。一款优质的订货系统源码不仅能提升供应链效率,还能通过二次开发满足个性化业务需求。这里结合 “标准化、易扩展” 两大核心要求,为您精选三款主流订货系统源码,助您快速搭…

实现插入排序

#include <bits/stdc.h> using namespace std; int a[100005],n; void charu() {for(int i1;i<n;i){int keya[i]; //key表示要排序的数字的数值int ji-1; //j表示前面已排序好的数的个数while(j>0&&key<a[j]){a[j1]a[j]; //把a[j]往后挪j--;}a[j1]…

ROM修改进阶教程------修改安卓机型SELinux宽容的几种方式方法 以及第三方系统中如何关闭SELinux宽容

SELinux是一种强制访问控制安全机制,用于增强Linux系统的安全性。在某些情况下,可能需要对 SELinux 进行宽容设置,以满足特定的应用需求。当SELinux处于宽容模式时,系统允许违反安全策略的行为发生,但不会阻止这些行为,通常会在日志中记录这些违规事件。这与强制模式不同…

MySQL索引数据结构

目录 1 索引常用的数据结构 1.1 二叉树 1.2 平衡二叉树 1.3 红黑树 1.3 Hash表 1.4 B树 1.4 B树 2 MySQL索引的数据结构 2.1 MyISAM存储引擎索引 2.2 InnoDB存储引擎索引 2.2.1 聚集索引 2.2.2 非聚集索引 2.2.3 联合索引数 2.2.4 hash索引 1 索引常用的数据结构 1.1 二叉树 二…

分布式锁—7.Curator的分布式锁一

大纲 1.Curator的可重入锁的源码 2.Curator的非可重入锁的源码 3.Curator的可重入读写锁的源码 4.Curator的MultiLock源码 5.Curator的Semaphore源码 1.Curator的可重入锁的源码 (1)InterProcessMutex获取分布式锁 (2)InterProcessMutex的初始化 (3)InterProcessMutex.…