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(); } 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; } }