diff options
Diffstat (limited to 'Assets/SampleUI/Scripts/ResizePanel.cs')
-rwxr-xr-x | Assets/SampleUI/Scripts/ResizePanel.cs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/Assets/SampleUI/Scripts/ResizePanel.cs b/Assets/SampleUI/Scripts/ResizePanel.cs new file mode 100755 index 0000000..0058bba --- /dev/null +++ b/Assets/SampleUI/Scripts/ResizePanel.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.EventSystems; + +public class ResizePanel : MonoBehaviour, IPointerDownHandler, IDragHandler { + + public Vector2 minSize = new Vector2 (100, 100); + public Vector2 maxSize = new Vector2 (400, 400); + + private RectTransform panelRectTransform; + private Vector2 originalLocalPointerPosition; + private Vector2 originalSizeDelta; + + void Awake () { + panelRectTransform = transform.parent.GetComponent<RectTransform> (); + } + + public void OnPointerDown (PointerEventData data) { + originalSizeDelta = panelRectTransform.sizeDelta; + RectTransformUtility.ScreenPointToLocalPointInRectangle (panelRectTransform, data.position, data.pressEventCamera, out originalLocalPointerPosition); + } + + public void OnDrag (PointerEventData data) { + if (panelRectTransform == null) + return; + + Vector2 localPointerPosition; + RectTransformUtility.ScreenPointToLocalPointInRectangle (panelRectTransform, data.position, data.pressEventCamera, out localPointerPosition); + Vector3 offsetToOriginal = localPointerPosition - originalLocalPointerPosition; + + Vector2 sizeDelta = originalSizeDelta + new Vector2 (offsetToOriginal.x, -offsetToOriginal.y); + sizeDelta = new Vector2 ( + Mathf.Clamp (sizeDelta.x, minSize.x, maxSize.x), + Mathf.Clamp (sizeDelta.y, minSize.y, maxSize.y) + ); + + panelRectTransform.sizeDelta = sizeDelta; + } +}
\ No newline at end of file |