分享一个项目中用的着的小功能(Unity不规则图形点击)
在使用UGUI组件时,`通常会遇到一下不规则图形点击。如图
现有的UGUI Button时间没办法处理重叠部分的点击事件。所以查了下资料,利用Polygon Collider2D检测实现重叠部分的点击效果。实现效果如下
实现方式如下
1.创建的Button按钮Image不勾选RaycastTarget
2. 在Button按钮下创建空物体Click,并添加脚本PolygonClick.cs。空物体的大小要大于不规则图形的大小。通过PolygonCollider2D 的Edit Collider编辑自己需要的不规则多边形点击区域。然后就完事了
核心脚本PolygonClick.cs代码如下,比较简单,也都写了注释。不规则点击的事件就完事了,比较简单的一个功能,给需要的童鞋一个参考。路过的且用的着的童鞋麻烦给个赞,多谢。
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonClick : Image
{
private new Collider2D collider;
protected override void Start()
{
var c2d = GetComponent<Collider2D>();
if (c2d != null)
collider = c2d;
base.Start();
}
public override bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
{
if (!raycastTarget)
return false;
if (collider != null)
{
var worldPoint = Vector3.zero;
//将屏幕空间点转换为世界空间中给定RectTransform平面上的位置
//返回值:如果RectTransform的平面被击中,则返回true,而不管这个点是否在矩形内。
var isInside = RectTransformUtility.ScreenPointToWorldPointInRectangle(
rectTransform,
sp,
eventCamera,
out worldPoint);
if (isInside)
isInside = collider.OverlapPoint(worldPoint); //判断是否在多边形包围区域内
return isInside;
}
else
{
return base.IsRaycastLocationValid(sp, eventCamera);
}
}
}