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

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的淡入淡…...

头歌作业-mysql数据库系统(全部)

每个作业只包含重要的建表代码,需要先进入数据库,创建基本的数据库之后才能使用下述命令创建表结构 MySql数据库-初识MySql 第一关:创建数据库 create database MyDb;第二关:创建表 create table t_emp(id int,name varchar(32…...

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体,已有多家媒体机构推出AI主播,最近杭州文化广播电视集团的《杭州新闻联播》节目,使用AI主持人进行新闻播报,且做到了0失误率,可见AI正在逐渐取代部分行业和一些重复性的工作,这一现象引发很…...

mitt 依赖库详解

一、概述 mitt 是一个极其轻量级的 JavaScript 事件发射器库,实现了发布-订阅模式。该模式允许对象间松散耦合,一个对象(发布者)可以发布事件,而其他对象(订阅者)可以监听这些事件并作出响应。…...

C语言100天练习题【记录本】

C语言经典100题(手把手 编程) 可以在哔哩哔哩找到(url:C语言经典100题(手把手 编程)_哔哩哔哩_bilibili) 已解决的天数:一,二,五,六,八&#xf…...

DeepSeek【部署 03】客户端应用ChatBox、AnythingLLM及OpenWebUI部署使用详细步骤

DeepSeek客户端应用 1.ChatBox2.AnythingLLM3.OpenWebUI4.总结 客户端软件提供可视化的模型及参数配置,人性化的对话窗口及文件上传功能,大大降低了大模型的使用门槛。 1.ChatBox Chatbox AI 是一款 AI 客户端应用和智能助手,支持众多先进的…...

Python图形编程之EasyGUI: msgbox的用法

1 EasyGUI: msgbox的用法 1.1 基础用法:只显示信息 示例代码: from easygui import * msgbox("Hello, world!")效果: 1.2 扩展用法1:设置标题 示例代码: from easygui import * msgbox("Hello, …...

计算机底层知识一——从编程语言到可执行程序

好久没写博客了,近段时间事情比较杂,最近终于有时间回归了。其余代码写久了就会遇到许多奇奇怪怪的问题,这些问题绕不开许多底层知识,比如缺少动态依赖库、idea编译失败等等,虽然通过百度等搜索引擎,亦或是…...

中性点直接接地电网接地故障Simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系代为转换) 2.系统仿真图: 3.中性点直接接地电网接地故障基本概念(本仿…...

解决Jenkins默认终止Shell产生服务进程的问题

1、Windows环境 Jenkins进行Build steps的使用Execute Windows batch command启动微服务(Jar包),Jenkins会默认终止Shell产生的服务进程,而在命令行能够正常运行的服务进程。 1.1 使用命令行启动服务是正常 使用命令行执行 正常…...

Spring Boot 项目中 Redis 常见问题及解决方案

目录 缓存穿透缓存雪崩缓存击穿Redis 连接池耗尽Redis 序列化问题总结 1. 缓存穿透 问题描述 缓存穿透是指查询一个不存在的数据,由于缓存中没有该数据,请求会直接打到数据库上,导致数据库压力过大。 解决方案 缓存空值:即使…...

STM32 I2C驱动开发全解析:从理论到实战 | 零基础入门STM32第五十步

主题内容教学目的/扩展视频I2C总线电路原理,跳线设置,I2C协议分析。驱动程序与调用。熟悉I2C总线协议,熟练调用。 师从洋桃电子,杜洋老师 📑文章目录 引言一、I2C驱动分层架构二、I2C总线驱动代码精析2.1 初始化配置&a…...

RuleOS:区块链开发的“破局者”,开启Web3新纪元

RuleOS:区块链开发的“破冰船”,驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中,一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”,冲破传统开发的冰层,驶向Web3的星辰大海。这艘船,正以一种前所未有的姿…...

manus本地部署使用体验

manus部署 https://github.com/mannaandpoem/OpenManus git clone https://github.com/mannaandpoem/OpenManus.git 或者手工下载zip包解压,包很小,只有几百K。 cd OpenManus-main #创建python环境,有python3的可以用python3 python -m ven…...

OpenCV 拆分、合并图像通道方法及复现

视频讲解 OpenCV 拆分、合并图像通道方法及复现 环境准备:安装 OpenCV 库(pip install opencv-python) 内容: 1. 读取任意图片(支持 jpg/png 等格式) 2. 使用 split () 函数拆解成 3 个单色通道&#xf…...

manus本地部署方法研究测试

Manus本地部署方法,Manus邀请码实在太难搞了,昨晚看到有一个团队,5个人3个小时,一个完全免费、无需排队等待的OpenManus就做好了。 由于也是新手,找了好几轮,实在是没有找到合适的部署方法,自己…...

基于Python实现的智能旅游推荐系统(Django)

基于Python实现的智能旅游推荐系统(Django) 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat 系统功能实现 总体设计 系统实现 系统首页模块 统首页页面主要包括首页,旅游资讯,景点信息…...

C++--迭代器(iterator)介绍---主要介绍vector和string中的迭代器

目录 一、迭代器(iterator)的定义 二、迭代器的类别 三、使用迭代器 3.1 迭代器运算符 3.2 迭代器的简单应用:使用迭代器将string对象的第一个字母改为大写 3.3 将迭代器从一个元素移动到另外一个元素 3.4 迭代器运算 3.5 迭代器的复…...

SpringCloud——Consul服务注册与发现

一、为什么要引入服务注册中心 (1)为什么引入 微服务硬编码 IP / 端口的核心问题总结 环境变更敏感:当支付微服务的 IP 或端口修改时,订单微服务必须同步修改所有调用该支付服务的代码或配置,否则将无法正常通信无法…...

C语言_数据结构总结5:顺序栈

纯C语言代码,不涉及C 想了解链式栈的实现,欢迎查看这篇文章:C语言_数据结构总结6:链式栈-CSDN博客 这里分享插入一下个人觉得很有用的习惯: 1. 就是遇到代码哪里不理解的,你就问豆包,C知道&a…...

人工智能之数学基础:正交矩阵

本文重点 正交矩阵是线性代数中一个重要的特殊矩阵,它在许多领域都有广泛的应用。 什么是正交矩阵 如图所示,当矩阵A满足如上所示的条件的时候,此时我们就可以认为是正交矩阵,需要注意一点矩阵A必为方阵。 正交矩阵的充要条件 …...

前端打包优化相关 Webpack

前端打包优化相关 Webpack 打包时间的优化(基于 Vue CLI 4 Webpack 5) 1. Webpack 配置减少打包时间 1.1 对 JS 配置:排除 node_modules 和 src 中的打包内容 在开发环境下,修改 Webpack 的 JS 规则,排除 /node_m…...

抓包分析工具介绍

什么是抓包分析工具? 抓包分析工具,也称为网络数据包嗅探器或协议分析器,用于捕获和检查网络上传输的数据包。这些数据包包含了网络通信的详细信息,例如请求的资源、服务器的响应、HTTP 头信息、传输的数据内容等等。通过分析这些…...

Linux第一课

一、Linux背景与发展 1. 发展史 1968年,研究人员开发了Multics操作系统,为后续发展奠定了基础。 1969−1970年,Ken Thompson和Dennis Ritchie在Multics基础上开发了UNIX系统。 1991年,Linus Torvalds发布了Linux操作系统&#…...

2025/3/8 第 27 场 蓝桥入门赛 题解

1. 38红包【算法赛】 签到题&#xff1a; 算倍数就行了 #include <bits/stdc.h> using namespace std; int main() {int ans0;for(int i1;i<2025;i){if(i % 3 0)ans;else if(i % 8 0)ans;else if(i % 38 0)ans;}cout<<ans<<endl;return 0; } 2. 祝福…...

使用Node.js从零搭建DeepSeek本地部署(Express框架、Ollama)

目录 1.安装Node.js和npm2.初始化项目3.安装Ollama4.下载DeepSeek模型5.创建Node.js服务器6.运行服务器7.Web UI对话-Chrome插件-Page Assist 1.安装Node.js和npm 首先确保我们机器上已经安装了Node.js和npm。如果未安装&#xff0c;可以通过以下链接下载并安装适合我们操作系…...

deepseek 3FS编译

3FS在ubuntu22.04下的编译&#xff08;记录下编译过程&#xff0c;方便后续使用&#xff09; 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...

网安知识点

1.SQL注入漏洞产生的原因是&#xff1f; 前端传到后端的数据&#xff0c;没有经过任何处理&#xff0c;直接当作sql语句的一部分来执行 2.讲一下sql注入&#xff0c;写入webshell需要哪些前提条件 开启导入导出权限secure-file-priv 站点根目录位置/路径 mysql用户对站点根目…...

UniApp 运行的微信小程序如何进行深度优化

UniApp 运行的微信小程序如何进行深度优化 目录 引言性能优化 1. 减少包体积2. 优化页面加载速度3. 减少 setData 调用4. 使用分包加载 代码优化 1. 减少不必要的代码2. 使用条件编译3. 优化图片资源 用户体验优化 1. 优化交互体验2. 预加载数据3. 使用骨架屏 调试与监控 1. …...

leetcode-sql数据库面试题冲刺(高频SQL五十题)

题目&#xff1a; 577.员工奖金 表&#xff1a;Employee -------------------- | Column Name | Type | -------------------- | empId | int | | name | varchar | | supervisor | int | | salary | int | -------------------- empId 是该表中具有唯一值的列。 该表的每一行…...