【Unity】解决UGUI的Button无法点击/点击无反应的排查方案

1.UGUI与用户实现交互的基本原理

当用户触摸/点击屏幕的时候,会从屏幕接触的那个点,从相机发射一条射线,如果射线中途有UI元素会阻挡射线(Raycast Target),则会根据实际情况执行UI交互的行为。

我们可以根据这个原理去逐个排查问题。

2.检查Canvas的Event Camera是否设置正确

这一步排查主要针对处于世界空间的Canvas(即Canvas的Render Mode设置为World Space),如果你的Button处于世界空间的Canvas内,请检查是否有给Canvas设置相机。

3.检查Button是否被翻转

UI射线只能命中Button的正面,而无法命中反面。检查Button的Rect Transform的Rotation参数是否让Button翻转了。

4.检查Canvas身上是否有Graphic Raycaster组件

有了该组件,Canvas及其内部的UI元素才能接收到UI射线。

这里有一个参数Ignore Reverse Graphics,意思就是"忽略翻转图形",对应了我说的第3点。

5.检查Button以及父对象是否被启用

有时候问题往往都是最低级的错误,例如你的按钮没有被启用(enable),或者你把可交互(interactable)给关闭了,又或者是这个按钮的父物体本身没有被启用。

6.给Button添加一个可以接收UI射线的组件

如果你的按钮只有Button组件,一般是无法被点击的,最好的办法是再添加一个Image组件。

7.检查Button前面是否有其它东西遮挡了它

UI射线一旦在路径上命中了一个可以被命中的目标,就不会再"穿透"命中了。

在Canvas里,排列在越靠下的UI越显示在前面,比如像下面这样,有一个Image排在了Button的下面,如果这个Image的位置和尺寸刚好遮挡了按钮,且这个Image的Raycast Target参数是被启用的,那么在运行的时候,点击按钮是不会有任何反应的。

8.检查Button是否正确添加了侦听事件

无论你是在脚本里动态添加对Button的OnClick事件侦听,还是在Inspector窗口中手动添加OnClick时要执行的函数,都记得检查一下你是否真的添加了事件侦听。

9.检查是否添加了Event System

只要你的场景里要实现UI交互,那么在场景中必须要有一个Event System对象(只需要一个就可以了)。

你还可以通过查看Event Sytem运行的时候在Inspector下方的信息变化来检查UI射线的命中情况(如果没有,可以按住下方的双横线向上拉起)。

相关推荐
石榴树下的七彩鱼12 小时前
图片修复 API 接入实战:网站如何自动去除图片水印(Python / PHP / C# 示例)
图像处理·后端·python·c#·php·api·图片去水印
忒可君13 小时前
C# winform 自制分页功能
android·开发语言·c#
南無忘码至尊13 小时前
Unity学习90天 - 第 6天 - 学习协程 Coroutine并实现每隔 2 秒生成一波敌人
学习·unity·c#·游戏引擎
张老师带你学14 小时前
unity 老版本资源迁移,第一人称,完整城市,有出身点房内视图,有gun shop视图,urp
科技·游戏·unity·模型·游戏美术
何以解忧唯有撸码17 小时前
玩转控件:封装个带图片的Label控件
c#·winform·自定义控件·封装控件·控件扩展
xiaoshuaishuai817 小时前
C# 实现百度搜索算法逆向
开发语言·windows·c#·dubbo
深兰科技17 小时前
深兰科技与淡水河谷合作推进:矿区示范加速落地
java·人工智能·python·c#·scala·symfony·深兰科技
我是唐青枫21 小时前
C#.NET ObjectPool 深入解析:对象复用、池化策略与使用边界
c#·.net
aq55356001 天前
Laravel2.x:被遗忘的PHP框架遗珠
开发语言·汇编·c#