Tanoda
RescalePanel.cs
Go to the documentation of this file.
1
3
5
7{
8 [AddComponentMenu("UI/Extensions/RescalePanels/RescalePanel")]
9 public class RescalePanel : MonoBehaviour, IPointerDownHandler, IDragHandler
10 {
11 public Vector2 minSize;
12 public Vector2 maxSize;
13
14 private RectTransform rectTransform;
15 private Transform goTransform;
16 private Vector2 currentPointerPosition;
17 private Vector2 previousPointerPosition;
18
19 private RectTransform thisRectTransform;
20 Vector2 sizeDelta;
21
22 void Awake()
23 {
24 rectTransform = transform.parent.GetComponent<RectTransform>();
25 goTransform = transform.parent;
26
27 thisRectTransform = GetComponent<RectTransform>();
28 sizeDelta = thisRectTransform.sizeDelta;
29 }
30
31 public void OnPointerDown(PointerEventData data)
32 {
33 rectTransform.SetAsLastSibling();
34 RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, data.position, data.pressEventCamera, out previousPointerPosition);
35 }
36
37 public void OnDrag(PointerEventData data)
38 {
39 if (rectTransform == null)
40 return;
41
42 Vector3 scaleDelta = goTransform.localScale;
43
44 RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, data.position, data.pressEventCamera, out currentPointerPosition);
45 Vector2 resizeValue = currentPointerPosition - previousPointerPosition;
46
47 scaleDelta += new Vector3(-resizeValue.y * 0.001f, -resizeValue.y * 0.001f, 0f);
48 scaleDelta = new Vector3(
49 Mathf.Clamp(scaleDelta.x, minSize.x, maxSize.x),
50 Mathf.Clamp(scaleDelta.y, minSize.y, maxSize.y),
51 1
52 );
53
54 goTransform.localScale = scaleDelta;
55
56 previousPointerPosition = currentPointerPosition;
57 float resizeDeltaValue = sizeDelta.x / goTransform.localScale.x;
58 Vector2 newSizeDelta = new Vector2(resizeDeltaValue, resizeDeltaValue);
59 thisRectTransform.sizeDelta = newSizeDelta;
60 }
61 }
62}
void OnPointerDown(PointerEventData data)
Definition: RescalePanel.cs:31
void OnDrag(PointerEventData data)
Definition: RescalePanel.cs:37
Credit Erdener Gonenc - @PixelEnvision.