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不会被背包遮挡,可以被射线检测到,被鼠标拖动;
相关文章:
Unity开发——CanvasGroup组件介绍和应用
CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha:控制UI的透明度 类型:float,0.0 ~1.0, 其中 0.0 完全透明,1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...
深度学习驱动的跨行业智能化革命:技术突破与实践创新
第一章 深度学习的技术范式演进与核心架构 1.1 从传统机器学习到深度神经网络的跨越 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代…...
php配置虚拟主机
在PHP中配置虚拟主机,通常是通过Apache或Nginx等Web服务器来进行设置的。下面我将分别介绍如何在Apache和Nginx中配置PHP虚拟主机。 1. Apache 配置虚拟主机 Apache是最常用的Web服务器之一,配置虚拟主机的步骤如下: 步骤一:确保A…...
RESTful API 设计指南
RESTful API 介绍 大佬的总结:RESTful API 设计指南 - 阮一峰的网络日志 json-server github地址 这里介绍一个快速搭建 REST API 服务的工具包 接口测试工具 介绍几个接口测试工具 apipost apifox postman https://www.apipost.cn/ (中文) https://www.apifox…...
在虚拟机上安装Hadoop
以下是在虚拟机上安装Hadoop的一般步骤: 准备工作 - 安装虚拟机软件:如VMware Workstation或VirtualBox等。 - 创建虚拟机:选择合适的操作系统镜像,如Ubuntu或CentOS等Linux发行版,为虚拟机分配足够的CPU、内存和磁盘…...
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。 答题思路 理解需求:要写一个函数,它能接收一个字符串,然后把这个字符串里每个单词的第一个字母变成大写。分解步骤 拆分单词:一般单词之间是用空格隔…...
【VUE2】第三期——样式冲突、组件通信、异步更新
目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...
深度学习代码解读——自用
代码来自:GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割(WSSS)所需的伪掩码(Pseudo-Masks),是 Stage2 训练的前置步骤。其核心流程为&a…...
Linux 配置静态 IP
一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址,每次启动虚拟机服务都是不一样的 IP,因此要配置静态 IP 地址避免每次都发生变化,下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念: 动态 IP…...
Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
背景:问题如上标题,H3C所有交换机配置的model都是comware 解决方案: 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…...
RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践
重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...
6.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础
在深度学习开发中,过拟合是一个常见且具有挑战性的问题。当模型在训练集上表现优秀,但在测试集或新数据上性能大幅下降时,就说明模型“记住”了训练数据中的噪声而非学习到泛化规律。本文将从实际开发角度系统讲解如何应对过拟合,…...
【玩转23种Java设计模式】结构型模式篇:组合模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...
专业工具,提供多种磁盘分区方案
随着时间的推移,电脑的磁盘空间往往会越来越紧张,许多人都经历过磁盘空间不足的困扰。虽然通过清理垃圾文件可以获得一定的改善,但随着文件和软件的增多,磁盘空间仍然可能显得捉襟见肘。在这种情况下,将其他磁盘的闲置…...
SELinux 概述
SELinux 概述 概念 SELinux(Security-Enhanced Linux)是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统。它确保服务进程仅能访问它们应有的资源。 例…...
【十三】Golang 通道
💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 通道通道声明初始化缓冲机制无缓冲通道代码示例 带…...
DeepSeek专题:DeepSeek-V2核心知识点速览
AIGCmagic社区知识星球是国内首个以AIGC全栈技术与商业变现为主线的学习交流平台,涉及AI绘画、AI视频、大模型、AI多模态、数字人以及全行业AIGC赋能等100应用方向。星球内部包含海量学习资源、专业问答、前沿资讯、内推招聘、AI课程、AIGC模型、AIGC数据集和源码等…...
Oracle19c进入EM Express(Oracle企业管理器)详细步骤
以下是使用Oracle 19c进入Oracle Enterprise Manager Database Express(EM Express)的详细步骤: ### **步骤 1:确认EM Express配置状态** 1. **登录数据库服务器** 使用Oracle用户或管理员权限账户登录操作系统。 2. **查看EM…...
游戏引擎学习第140天
回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式,声音在技术上是一个非常特别的存在,但在游戏中进行声音混音的需求其实相对简单明了,所以今天的任务应该不会太具挑战性。 今天我们会编写一个…...
C++--迭代器(iterator)介绍---主要介绍vector和string中的迭代器
目录 一、迭代器(iterator)的定义 二、迭代器的类别 三、使用迭代器 3.1 迭代器运算符 3.2 迭代器的简单应用:使用迭代器将string对象的第一个字母改为大写 3.3 将迭代器从一个元素移动到另外一个元素 3.4 迭代器运算 3.5 迭代器的复…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决
问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
