Image透明度点击简述以及Unity2019之后存在无法点击的BUG修复

前言

自Unity2019之后Unity将UGUI模块从内置库修改成了通过PackageManger引入的方式。Image就来源于com.unity.modules.imgui模块。其实代码大体代码跟2018是一致的,但是还是有些细微差别,Image透明度点击不命中就是2019之后才有的问题,2018版本是没有这个问题的,我都怀疑是开发人员抄代码没抄全。

首先这个点击不命中是在你使用图集的方式打包UI图片时出现,Unity使用SpriteAtlas自动打包图集。

什么时候使用透明度点击

有时候美术做的图片,希望在交互的时候避免玩家点击空白处也能响应,但是由于图片是矩形的,这个时候就要使用透明度点击,也就是设置Image的alphaHitTestMinimumThreshold值,设置这个值需要满足以下条件:

  • Sprite所在纹理(图集)压缩格式不为Crunch类型
  • Sprite所以纹理(图集)是可读的

简述透明度点击原理

每次我们点击屏幕Unity我使用射线检查判断当前点击的对象是否可以点击。当判定到了当前点击对象的时候,会去调用IsRaycastLocationValid 来对当前点击的位置进行判断是否可以点击,如果没有设置透明度点击(alphaHitTestMinimumThreshold值为0)就直接可以点击。如果设置了就将屏幕点击点换算到Sprite所在纹理坐标中,再通过这个纹理坐标(uv)去读取这个坐标像素的alpha值,如果大于设置的alphaHitTestMinimumThreshold值就表示可以点击。

Unity的Bug

我们首先来看看Unity的源码
在这里插入图片描述
我们可以看到Unity在计算uv的时候,拿的是Sprite的Rect内的x,y坐标去除的Sprite对应的图集的尺寸,得出来的结果肯定就是错的。
正确的做法应该是拿到Sprite在图集的偏移位置除以图集的尺寸。

// Convert local coordinates to texture space.
Rect spriteRect = overrideSprite.textureRect;
float x = (spriteRect.x + local.x) / overrideSprite.texture.width;
float y = (spriteRect.y + local.y) / overrideSprite.texture.height;

虽然但是,我们知道怎么改,但是改不了,这个是Unity的基础依赖库,很多其他的库都依赖这个1.0.0版本的库,我们不能直接修改也没法升级,就只能另辟蹊径了,可以重新创建一个新的类来继承Image来重写IsRaycastLocationValid方法。
我在下面放上我修改重新的类文件,就不直接贴出来了。

【UnityShader】设置Image组件图片透明四个方向透明渐变(Sprite原理相同) 使用UnityShader实现Image组件的透明度渐变 阅读详情

相关推荐

unity Image/RawImage贴图透明度渐变/融合 & 正片叠底

功能需求:UI边界太硬,需要做个渐变看起来更柔和。 贴图正片叠底

IT_choshim的博客 4557

unity 改变image的透明度

k601705914的博客 1896

Unity UI点击失效全解析:从GraphicRaycaster原理到系统性排查方案

在Unity游戏开发中,UI交互是连接玩家与游戏世界的核心桥梁,其底层依赖于事件系统与射线检测机制。GraphicRaycaster作为Unity UI事件系统的关键组件,负责将屏幕输入转换为对特定UI元素的命中检测,其工作原理涉及屏幕坐标转换、层级排序与事件分发等多个环节。理解这一机制的技术价值在于,它能帮助开发者构建响应灵敏、体验流畅的用户界面,是提升游戏品质的基础。在实际开发中,UI点击失效是常见痛点,尤其在复杂界面、动态生成元素或跨平台适配等应用场景下。本文聚焦Raycast Target配置、Ca

weixin_34354945的博客 335

Unity 通过修改图片透明度实现淡出效果

绑定在需要淡入淡出的物体上就能直接使用 通过修改透明度实现 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class transparency : MonoBehaviour { //时长 public float time=0.5f; //定时器 public flo.

海月的博客 9583

Unity TextMeshPro字体背景框Bug:Shader调试与SDF渲染原理深度解析

在计算机图形学中,着色器(Shader)是控制渲染管线的核心程序,它决定了像素在屏幕上的最终颜色和透明度。其工作原理是通过顶点着色器和片段着色器处理几何数据与纹理采样,实现光照、材质和透明效果。在UI开发领域,高质量的字体渲染至关重要,有向距离场(SDF)技术通过存储每个像素到字符轮廓的距离信息,实现了字体在任意缩放下的平滑边缘。然而,SDF渲染在实践中常遇到因参数设置不当导致的视觉瑕疵,例如在特定背景下字体周围出现异常色块。这类问题通常源于Alpha混合计算中的阈值偏差,尤其在移动端多平台适配时,因图形A

weixin_33843409的博客 319

Unity透明窗口开发指南:实现桌面层叠与透明特效

在桌面应用开发中,窗口管理是构建沉浸式用户体验的基础技术之一。其核心原理在于通过操作系统提供的窗口API,控制窗口的视觉属性和层级关系,实现像素级的透明度混合与事件传递。这项技术的工程价值在于能够突破传统矩形窗口的限制,为开发者创造非侵入式、高度个性化的桌面交互工具提供了可能。典型的应用场景包括桌面悬浮小部件、创意媒体展示、效率工具叠加层等,这些都需要处理透明背景、点击穿透和窗口层级管理。本文聚焦于Unity引擎中透明窗口的实现,通过封装Windows原生API,解决了Unity渲染内容与系统窗口间的鸿沟,

weixin_33912453的博客 673

Unity UGUI Image使用图集透明度点击过滤BUG

Unity的Image.IsRaycastLocationValid在判断alphaHitTestMinimumThreshold的时候会使用图集中的点判断alpha而不是原Sprite中的点。其实只重写了IsRaycastLocationValid方法,但是要访问private方法 只能拷贝出来了。所以会导致无法正确获取到alpha,要修复这个BUG可以重写Image类。将Sprite打入图集时会默认去掉边缘的alpha=0的部分。主要是添加了这段代码 其他都是原装的。

AcmHonor的专栏 470

AssetRipper进阶指南:三步突破Unity资产提取效率瓶颈

在游戏开发与资源管理中,资产提取是处理Unity打包资源的关键环节,其核心原理在于解析引擎的序列化格式并将其还原为可编辑的通用格式。这项技术对于游戏逆向分析、资源归档和项目迁移具有重要价值,尤其在处理大型项目或复用美术资源时,高效的提取流程能显著提升工作效率。针对常见的提取效率低下、资产不完整等问题,本文聚焦于AssetRipper这一主流工具,通过精准配置、专项处理与流程优化三步策略,系统性地解决资产依赖解析、版本兼容性及后处理缺失等痛点。文中深入探讨了命令行批量处理、纹理颜色空间修复、模型动画完整导出等

weixin_33782386的博客 321

【unity】分享一个很呆的bug

今天在做用户面板的时候希望通过点击向左和向右来切换图标的选中。但是我出了一个很怪的问题,就是不论设置什么颜色,最后都会变成“白色”。忘了是学unity的多少天了,已经混淆时间了。对得起找了一个小时bug的我吗(啊啊啊)最后在排查后发现,原因在这里。

fb的博客 393

Unity PSD导入插件原理与实战:自动化UI资源工作流

在游戏开发中,UI资源的高效导入与管理是提升团队协作效率的关键环节。传统手动处理PSD文件的方式不仅繁琐,且难以应对频繁的设计迭代。通过解析PSD文件结构,将图层信息、层级关系与属性自动转换为Unity可识别的GameObject和Sprite资源,可以实现设计稿的精准还原与资源自动化生成。这一技术方案的核心价值在于打通设计与开发管线,大幅降低沟通成本与返工率。在实际应用场景中,结合命名规范、自动图集集成与运行时性能优化,能够构建稳定高效的UI生产流程。Psd2Unity Importer正是实现这一自动化

weixin_34296641的博客 290

Unity TextMeshPro白色背景问题:材质着色器与SDF字体渲染深度解析

在Unity UI开发中,材质(Material)与着色器(Shader)的匹配是渲染管线的基础。材质定义了物体表面的视觉属性,而着色器则是一组控制渲染流程的指令程序,负责将3D数据转换为屏幕像素。当材质使用了错误的着色器时,会导致渲染异常,例如纹理采样错误、光照计算失效或透明度处理不当。在TextMeshPro(TMP)的SDF(Signed Distance Field)字体渲染中,其专用着色器负责解析距离场纹理中的灰度信息,以生成平滑、抗锯齿的文字边缘。若错误地使用了标准着色器(如Standard),

weixin_34090562的博客 482

Unity UGUI圆角UI高效实现:开源组件Unity-UI-Rounded-Corners实战指南

在Unity游戏开发中,UI系统是连接玩家与游戏世界的重要桥梁,其视觉效果直接影响用户体验。UGUI作为Unity的原生UI解决方案,虽然功能强大,但在处理特定视觉效果如圆角时存在局限。传统方法依赖Sprite图片或自定义Shader,前者面临资源管理复杂、拉伸变形问题,后者则可能引入性能开销和Draw Call增加。为解决这一痛点,开源组件Unity-UI-Rounded-Corners应运而生,它通过优化的Shader和脚本,实现了在Inspector面板直接调整圆角参数的高效工作流。该技术不仅提升了U

weixin_33693070的博客 584

Unity GUI开发终极指南:模块化架构、性能优化与实战集成

在Unity游戏开发中,用户界面(GUI)系统是连接玩家与游戏世界的核心桥梁。其底层原理基于Canvas渲染体系与事件系统,通过RectTransform进行布局控制。良好的GUI架构能显著提升开发效率与游戏性能,其技术价值体现在模块化、可维护性与跨平台适配性上。在实际应用场景中,开发者常面临UI性能优化、复杂动画集成以及资源包与项目架构融合等挑战。本文聚焦于Unity GUI的工程实践,深入探讨了模块化设计、Canvas分割策略以及Draw Call优化等关键技术,并针对“TextMeshPro描边效果异

weixin_30482383的博客 390

3步掌握AssetRipper:Unity游戏资源提取终极指南

AssetRipper是一款专业的Unity游戏资源提取工具,能够从游戏文件中提取3D模型、纹理和音频等资源并转换为可编辑格式。无论你是游戏开发者、Mod创作者还是技术研究者,掌握这款工具都能让你轻松获取和分析Unity游戏的核心资源。 ## 一、为什么你需要AssetRipper? ### 1.1 游戏开发者的秘密武器 想象一下,你正在学习一款优秀游戏的实现方式,但无法直接查看其内部资源。

gitblog_00481的博客 186

Linux系统搭建OpenClaw(原Clawdbot)全流程指南 最新版

工具定位:开源个人 AI 助手,支持文件读取、命令执行、多渠道交互(Telegram / 本地终端等);系统要求:主流 Linux 发行版(Ubuntu/Debian/CentOS 等),Node.js ≥22(核心依赖);安全提示:OpenClaw 为测试版,具备高权限操作能力,建议使用非主力机,配置权限白名单,避免接触敏感数据。

AI时代老码农的第二春 6560

国腾|GM8775C替换TC358775/MIPI转双通道LVDS

1 产品概述 GM8775C 型DSI 转双通道 LVDS 发送器产品主要实现将MIPI DSI 转单/双通道 LVDS 功能,MIPI 支持 1/2/3/4 通道可选,最大支持 4Gbps 速率。LVDS时钟频率最高154MHz,最大支持视频格式为 FULL HD(1920 x 1200)。 该芯片主要应用于手持设备、双屏显示,大屏幕显示等应用需求。 2 产品特征 a) I/0电源电压:1.8V /3.3V; b) core 电源电压...

Vasse的博客 1073

unity 2d 入门 飞翔小鸟 死亡 显示GameOver(十四)

把图片拖进去。

weixin_43205308的博客 566

架构——异地多活成熟的架构模式

摘要: 本文系统介绍了三种异地多活架构模式:业务定制型、业务通用型和存储通用型。业务定制型针对核心业务定制化设计,复杂度低但扩展性差;业务通用型通过统一配套服务(流量调度、配置中心等)实现多业务兼容,适合业务量大但一致性要求不高的场景;存储通用型依托分布式一致性数据库(如OceanBase、TiDB)天然支持强一致性,适合金融等高要求场景,但对部署距离和成本有较高限制。文章对比了各模式的优缺点及适用场景,为不同业务需求下的架构选型提供了实践指导。

小志的博客 7088

Unity资源逆向工程实战:AssetRipper核心原理与资源提取指南

在游戏开发与数字内容创作领域,资源逆向工程是一项关键技术,它涉及对已编译或打包的资产文件进行解析与重构,以提取可编辑的原始资源。其核心原理在于理解并逆向目标引擎的序列化格式,将二进制数据还原为模型、纹理、音频等通用格式。这项技术的价值在于支持技术研究、内容分析、Mod制作以及项目恢复等多种场景。AssetRipper正是这一领域的代表性工具,它通过持续更新的解析器,逆向Unity引擎的资产序列化体系,实现从.assets或AssetBundle文件中高效提取资源。对于Unity开发者和技术美术而言,掌握As

weixin_30333885的博客 424

基于Simulink的二相混合式步进电机驱动器快速建模与仿真实践

本文详细介绍了如何利用Simulink对二相混合式步进电机驱动器进行快速建模与仿真。通过从零搭建电机数学模型、设计H桥控制逻辑,并集成步进时序,手把手指导读者创建可运行的仿真模型文件。该方法能有效验证控制策略,避免硬件调试风险,是学习与实践电机驱动开发的理想途径。

weixin_29171087的博客 148

Revit实战:从零到一,手把手教你用族(Family)搭建一个完整的水闸BIM模型

本文详细介绍了如何使用Revit的族(Family)功能从零开始构建一个完整的水闸BIM模型。通过参数化族设计,实现闸门开度调整自动关联流量计算等智能化功能,提升水利工程BIM模型的工程价值和应用效率。文章涵盖族库规划、核心构件创建、高级技巧及BIM数据深度应用,为水利工程数字化提供实用指南。

weixin_28738165的博客 263

FairyGUI与Unity坐标转换全解析:原理、实战与避坑指南

在游戏开发中,UI系统与游戏逻辑的交互是核心环节,其中坐标转换是实现UI点击检测、3D特效挂载、多UI系统互通等高级功能的基础。其原理涉及从UI本地坐标系到屏幕空间,再到世界空间的多层映射,理解不同坐标系(如逻辑坐标、屏幕坐标、世界坐标)及其转换链条是技术关键。正确的坐标转换能极大提升开发效率与交互准确性,避免UI错位、点击失效等问题。本文聚焦于FairyGUI这一流行UI解决方案,深入剖析其与Unity两套坐标系的转换机制,通过实战代码示例,详细讲解如何将UI元件位置映射到3D世界、实现3D点击检测以及与

weixin_34378969的博客 315

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇 文章目录Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇前言一、数据库的安装前准备,前提是没有安装过!!!二、仅安装数据库软件(数据库运行环境)三、添加数据库实例四、设置监听程序,让数据库可以通过网络访问五、为目标数据库设置网名总结 前言 如果需要安装包:联系我看到会给你链接,因为现在官网已经不提供10g,11g的安装包了,在网盘保存望悉知(回复不会很及时,下班看到会回复敬请谅解)。 提示:以下

zhx__的博客 5630

5步掌握Unity资源提取:AssetRipper完整使用手册

你是否曾经面对Unity游戏中的精美3D模型、炫酷纹理或动听音效,想要将它们提取出来用于学习或创作,却苦于没有合适的工具?AssetRipper正是为解决这一痛点而生的开源利器。作为一款专业的Unity资源提取工具,它能够帮助开发者从游戏文件中提取3D模型、纹理、音频等各类资源,并将它们转换为通用的可编辑格式。无论你是想要学习优秀游戏的技术实现,还是计划制作游戏MOD,亦或是需要迁移项目资源,As

gitblog_00733的博客 498

802.1AS-2011_Gptp协议栈

GPTP(广义时钟同步协议,或IEEE 802.1AS)的基本功能是确保局域网中所有的时钟都同步,并提供时间信息。这种协议用于在局域网中进行同步和时间对齐,其目的是确保网络中各设备的时间一致性。

weixin_49041703的博客 2543

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2199
上一篇: Unity项目包体优化经验方法论(Android平台)
Aertims
博客等级 码龄10年 109粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值