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.
44 lines
1.5 KiB
44 lines
1.5 KiB
3 years ago
|
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;
|
||
|
}
|
||
|
}
|