欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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的碰撞盒范围
C# + Unity 开发日记(三) UGUI多边形事件检测
为Button添加点击事件后,只有当点击在碰撞盒范围之内才会响应点击事件。