Unity UI中的自定义形状按钮

最近,我需要在项目中使用非标准形式的按钮。 但是,这项看似微不足道的任务给我带来了一些困难。

问题在于,即使在透明区域中,标准的UI按钮也可以处理单击,在这种情况下,这是完全不希望的。 同时,Button组件本身没有任何(在检查器中可见)参数,这些参数可能负责按钮的哪些区域可以处理悬停/单击。


经过一段时间的互联网搜索和吸烟文档搜索后,以下是这个简单的解决方案:

(我马上要说一个类似的例子在Unity文档中 ,但是目前它的代码已经被标记为过时了,所以我决定对其进行一些更新和修改)

using UnityEngine; using UnityEngine.UI; public class ButtonClickMask : MonoBehaviour { [Range(0f, 1f)] //1 public float AlphaLevel = 1f; //2 private Image bt; //3 void Start() { bt = gameObject.GetComponent<Image>(); bt.alphaHitTestMinimumThreshold = AlphaLevel; //4 } } 

  1. 在检查器中显示方便滑块的属性,其值从0到1。
  2. 光标在其上的纹理部分必须具有的最小Alpha通道值才能处理单击。
  3. 按钮的图像组件(您需要使用它,而不是按钮)。
  4. alphaHitTestMinimumThreshold参数正是确定部分纹理的最小透明级别的参数,以便它可以处理压制。

脚本准备就绪。 现在让我们继续调整按钮的纹理。 为了使代码正常工作而不产生错误,必须在“导入设置”纹理中启用读取/写入功能。 请记住通过单击“应用”接受更改。



现在,将脚本挂在所需的按钮上,将“ Alpha Level”设置为所需的值(在我的情况下为1)...



...我们启动并为按钮不再处理对透明区域的点击感到高兴!

Source: https://habr.com/ru/post/zh-CN478734/


All Articles