在平时开发中,难免会遇到需要使用不规则按钮的需求,我记得在以前面试的时候也遇到过这种提问,今天就给大家介绍一下Unity和UE4这两个引擎如何实现这种不规格按钮的点击。
因为不论在Unity还是UE4中,按钮形状都是长方形的,那么不规则按钮我们就需要用到一张带Alpha值的图片,如图所示,黄色框是按钮整个的形状,但是我们想实现只点击红色区域触发点击事件,显然红色区域的Alpha值不为0,而其他区域则为0,所以实现不规则按钮点击的核心就是根据Alpha值来决定触不触发按钮事件。
在Unity中,它为Image提供了一个alphaHitTestMinimumThreshold的属性,这个属性提供了一个阈值来限制射线检测生效的alpha值。也就是说,比如我们将阈值设为0.5(该值类型为float,有效范围0到1),那么点击Image上像素的alpha值小于0.5的区域时,程序是不会触发点击事件的。需要注意的是,使用alphaHitTestMinimumThreshold属性需要开启sprite的Read/Write Enbale属性。
脚本如下,在Awake函数中设置alphaHitTestMinimumThreshold 的值
void Awake () {
Image image = GetComponent<Image>();
image.alphaHitTestMinimumThreshold = 0.1f;
}
那么在UE4中如何实现呢?首先新建一个C++类,定义两个变量
UTexture2D* AdvancedHitTexture; //检测的Texture
int AdvancedHitAlpha; //设置引起触发事件的Alpha值
并且为Texture添加一个属性分类叫AdvancedHitTest
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "AdvancedHitTest") UTexture2D* AdvancedHitTexture;
完整代码我就不贴了,编译后就会多一种UI控件叫AlphaButton,他比一般的Button多一个分类叫Advanced Hit Test,它包含两个属性值Advanced Hit Texture和Advanced Hit Alpha。将Texture指定为我们需要用到的图片,Alpha值设定为1。
这样,两个不规则按钮的点击都实现了。
demo地址:
链接:https://pan.baidu.com/s/1gICBTkAyKlXaZ0iasLjuhA
提取码:pbwk