1、不推荐,图片需要开启Read/Write Enable,会增加内存消耗
using UnityEngine;
using UnityEngine.UI;
public class UnRugularShapeClick : MonoBehaviour
{
void Start()
{
GetComponent<Image>().alphaHitTestMinimumThreshold = 0.1f;
}
}
将UnRugularShapeClick脚本挂载再按钮上即可,在图片透明处点击无效。
2、推荐,使用polygonCollider2D
using UnityEngine;
using UnityEngine.UI;
public class CustomImage : Image
{
private PolygonCollider2D _polygon;
private PolygonCollider2D Polygon
{
get
{
if (_polygon == null)
_polygon = GetComponent<PolygonCollider2D>();
return _polygon;
}
}
public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
{
Vector3 point;
RectTransformUtility.ScreenPointToWorldPointInRectangle(rectTransform, screenPoint, eventCamera, out point);
return Polygon.OverlapPoint(point);
}
}
将button上的Image替换成 CustomImage;挂载polygonCollider2D组件,在polygonCollider2D上指定碰撞体区域即可