u3d计算图片透明值_【小技巧】透明图片和按钮的交互

本文介绍了在Unity中如何处理UI按钮只响应非透明区域点击的技巧。通过利用Unity的alphaHitTestMinimumThreshold属性,设置一个阈值,使得只有当点击的像素alpha值大于等于该阈值时,按钮才会响应。为了解决初次运行报错,需要确保Sprite的“Read/Write Enabled”属性被勾选。这样,通过简单脚本设置阈值,就能实现所需功能。
摘要由CSDN通过智能技术生成

c65ce917c09474ecc9768ceb0c44ce8f.png

在用Unity做项目的过程中,会遇到一类比较特殊的问题。怎么特殊呢?我给你一张圆形的图片,你拿去做按钮或者UI图,乍一听,貌似也没啥。但是有一个要求,点击图片的透明部分不能有反应(也就是说只有点击不透明的部分才能触发按钮或者图片点击),看下图(灵魂画手,哈哈哈哈),只有点击非黄色(透明)区域才能触发按钮点击。

ce9d28429b6a852017e075592b8f4d6e.png

遇到这样的需求怎么搞呢?按照一般的思路是点击鼠标时查看鼠标点击位置的alpha的值,对其进行过滤处理。笔者一开始也是这么想的,但是查了很多API发现不太能方便的拿到这个像素的alpha值。所以后来网上找了一些资料,发现Unity在Image上提供了一个属性alphaHitTestMinimumThreshold,表示可以进行hit检测的alpha阈值,再直白一点就是图片或者按钮想要满足交互事件,那么alpha值必须大于等于我们设置的值,剩下的就不用你管了,只要设置一下这个值就OK了。

所以我们写一个脚本,再需要检测的UI上挂在此组件即可。

using UnityEngine;

[RequireComponent(typeof(UnityEngine.UI.Image))]
public class DoAlphaTest : MonoBehaviour 
{
    public float alphaTestThreshold = .05f;

    private void Awake()
    {
        GetComponent<UnityEngine.UI.Image>().alphaHitTestMinimumThreshold = alphaTestThreshold;
    }
}

但是首次运行会报错,如下图所示。

a4dd70f91860e32836fc5d49602f63ae.png

大致意思是想要使用alphaHitTestMinimumThreshold属性,Image组件使用的sprite必须是可读的,所以选择对应的Sprite,勾选“Read/WriteEnabled”属性,如下图所示。

336ef10429f19f6c6b53c73e3a010f94.png

至此,这个问题已经解决了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值