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