8 [AddComponentMenu(
"UI/Extensions/RescalePanels/RescaleDragPanel")]
11 private Vector2 pointerOffset;
12 private RectTransform canvasRectTransform;
13 private RectTransform panelRectTransform;
15 private Transform goTransform;
19 Canvas canvas = GetComponentInParent<Canvas>();
22 canvasRectTransform = canvas.transform as RectTransform;
23 panelRectTransform = transform.parent as RectTransform;
24 goTransform = transform.parent;
30 panelRectTransform.SetAsLastSibling();
31 RectTransformUtility.ScreenPointToLocalPointInRectangle(panelRectTransform, data.position, data.pressEventCamera, out pointerOffset);
34 public void OnDrag(PointerEventData data)
36 if (panelRectTransform ==
null)
39 Vector2 pointerPosition = ClampToWindow(data);
41 Vector2 localPointerPosition;
42 if (RectTransformUtility.ScreenPointToLocalPointInRectangle(
43 canvasRectTransform, pointerPosition, data.pressEventCamera, out localPointerPosition
46 panelRectTransform.localPosition = localPointerPosition -
new Vector2(pointerOffset.x * goTransform.localScale.x, pointerOffset.y * goTransform.localScale.y);
50 Vector2 ClampToWindow(PointerEventData data)
52 Vector2 rawPointerPosition = data.position;
54 Vector3[] canvasCorners =
new Vector3[4];
55 canvasRectTransform.GetWorldCorners(canvasCorners);
57 float clampedX = Mathf.Clamp(rawPointerPosition.x, canvasCorners[0].x, canvasCorners[2].x);
58 float clampedY = Mathf.Clamp(rawPointerPosition.y, canvasCorners[0].y, canvasCorners[2].y);
60 Vector2 newPointerPosition =
new Vector2(clampedX, clampedY);
61 return newPointerPosition;
void OnDrag(PointerEventData data)
void OnPointerDown(PointerEventData data)
Credit Erdener Gonenc - @PixelEnvision.