效果
脚本
游戏对象组件 Image
PolygonCollider2D
- 方式一:
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonColliderPointerHandler : Image, IPointerClickHandler
{
private PolygonCollider2D _polygon;
private PolygonCollider2D Polygon
{
get
{
if (_polygon == null) _polygon = GetComponent<PolygonCollider2D>();
return _polygon;
}
}
// 判断是否在区域内
public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
{
RectTransformUtility.ScreenPointToWorldPointInRectangle(rectTransform, screenPoint, eventCamera,
out Vector3 point);
return Polygon.OverlapPoint(point); // 判断点击位置是否在区域内
}
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("不规则区域点击事件~~~");
}
}
- 方式二:
using UnityEngine;
using UnityEngine.EventSystems;
[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonColliderPointerHandler : MonoBehaviour, IPointerClickHandler
{
private PolygonCollider2D _polygon;
private void Awake()
{
_polygon = GetComponent<PolygonCollider2D>();
}
public void OnPointerClick(PointerEventData eventData)
{
if (_polygon.OverlapPoint(eventData.position))
{
Debug.Log("不规则区域点击事件~~~");
}
}
}