《Unity》 判断点击是否在UI的recttransform范围内

unity提供了很多API给我们使用,但是经常会由于锚点或者不好的原因计算错误的结果,这里有一个100%正确的做法。

  private Rect GetWorldRect(RectTransform rectTransform)
        {
            Vector3[] corners = new Vector3[4];
            rectTransform.GetWorldCorners(corners);
            float width = Math.Abs(Vector2.Distance(corners[0], corners[3]));
            float height = Math.Abs(Vector2.Distance(corners[0], corners[1]));
            return new Rect(corners[0], new Vector2(width, height));
        }

        private bool IsClickInArea(Vector2 position)
        {
            RectTransform rect = transform as RectTransform;
            if(rect!=null)
            {
                Rect worldRect = GetWorldRect(rect);
                RectTransformUtility.ScreenPointToWorldPointInRectangle((RectTransform)canvas.transform, position, UICamera, out Vector3 worldPosition);
                return worldRect.Contains(worldPosition);
            }
            return false;
        }

都转化到世界坐标判断,就无敌了

你可能感兴趣的:(Unity,ui,unity,编辑器)