UGUI判断点击坐标是否在UI内部,以及子UI内部
public void GetClickArea(Vector2 screenPoint)
{
Vector2 localPoint;
//将屏幕坐标转化为相对rectTrans的本地坐标
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, screenPoint, UICamera, out localPoint))
{
if (rectTrans.rect.Contains(localPoint))
{
Debug.LogError("内部");
}
else
{
Debug.LogError("外部");
}
}
}
上面代码很好理解,用了UGUI的API把屏幕坐标点(以左下角为原点)的点转化到UI坐标点
现在有个问题来了,如果我们在rectTrans内部还有个子物体,我们想判断点在了子物体内部还是外部,那该怎么判断呢
public void GetClickArea(Vector2 point)
{
Vector2 localPoint;
//将屏幕坐标转化为相对rectTrans的本地坐标
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, point, Camera.main, out localPoint))
{
//rectTrans.rect是rectTrans的本地坐标,不能rectTrans.rect.Contains(point)直接判断,必须先转为本地坐标localPoint
//判断点击的坐标点是否在子物体内
//屏幕坐标减去子UI的坐标很重要,否则判定错误
Vector2 pos = localPoint - (Vector2)validArea.localPosition;
if (validArea.rect.Contains(pos))
{
Debug.LogError("上部");
}
else
{
Debug.LogError("下部");
}
}
}