C# + Unity 开发日记(三) UGUI多边形事件检测
程序员文章站
2024-03-18 19:59:10
...
环境Unity2018.4.0f1
利用PolygonCollider2D实现碰撞器边界检测。大致思路是在Image组件上添加一个PolygonCollider2D碰撞器,重写Image中的 IsRaycastLocationValid方法,判断点击的点是否在我们需要的响应区域内。
下面直接上代码实现
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonImage : Image
{
private PolygonCollider2D polygon;
private Vector3 worldPoint;
protected override void Awake()
{
base.Awake();
polygon = GetComponent<PolygonCollider2D>();
}
public override bool IsRaycastLocationValid(Vector2 screenPoint, Camera eventCamera)
{
RectTransformUtility.ScreenPointToWorldPointInRectangle(rectTransform, screenPoint, eventCamera, out worldPoint);
bool inside = polygon.OverlapPoint(worldPoint);
return inside;
}
}
在场景中新建一个Image,将Image组件替换成自定义的PolygonImage,在编辑器模式下编辑PolygonCollider2D的碰撞盒范围
为Button添加点击事件后,只有当点击在碰撞盒范围之内才会响应点击事件。