【Unity】Button组件Bug总结:按钮失灵、穿透

【Unity】Button组件Bug总结:按钮失灵、穿透

首先简单理一下如何使用UGUI的按钮:

Hierarchy右键,UI > Button (Button - TextMesh Pro)
On Click() 处选择回调函数,或者代码中执行

button.onClick.AddListener(ClickFunctionName);

Button组件

这样整套操作下来基本不会遇到问题,但很多时候,程序员卡皮巴拉处理的UGUI界面并不是自己做的,或者经手动画师无敌暴龙战士二次加工过。这样一来就会发生一些神奇的事情。

Raycast Target

  • ,可视为光线投射的目标
  • ,不视为光线投射的目标

每个Button组件都会关联一个Target Graphic,这对应一个Image组件,Raycast Target参数决定了组件是否会响应射线检测,Button事件的触发就依赖于射线检测,所以此参数不勾选,按钮就不响应。

Raycast Target

Interactable

顾名思义,此参数决定Button是否可交互,算是官方开关,需要注意此参数为false时,按钮的颜色会被更改为Disabled Color,默认就会半透明,有时候这很画蛇添足。

Interactable

Canvas 与 Graphic Raycaster

  1. 如果某节点添加了Canvas组件但是没有添加Graphic Raycaster组件,那么这一节点以及其所有子节点的射线检测都会失效,即使父节点Canvas有相应的Graphic Raycaster也会失效
  2. Ignore Reversed Graphics 默认勾选,射线检测只在一面有效,如果翻转按钮,按钮就会失灵;
  3. 很容易忽略的一件事,Canvas Group也必须配合Graphic Raycaster使用,射线检测才不会失效,在这点上,Canvas Group和Canvas是等效的。

Canvas 与 Graphic Raycaster

Maskable

首先,如果两张重叠的Image都勾选了Raycast Target,那么层级高的Image会遮挡层级低的Image,这是避免按钮穿透非常常用的方法。
此方法生效有一个前提,那就是层级高的Image的Maskable值为true。

Maskable

其他

还有一种很蠢的可能,但是不可忽视。UGUI组件生效的前提是组件处于激活状态,如果组件未激活,那与之相关的所有属性都不会生效。如果挂载组件的对象都没激活那就更不会生效。这种情况是有可能被忽略的,比如做一个透明按钮的时候,开发者意识不到对象是否激活。所以遇到BUG时还要检查运行态各个对象、组件的状态是否满足期待。

其他

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值