You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
43 lines
1.5 KiB
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; |
|
} |
|
}
|
|
|