|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
using UnityEngine.EventSystems;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
|
|
|
|
|
public class DragPanel : MonoBehaviour, IPointerDownHandler, IDragHandler {
|
|
|
|
|
|
|
|
|
|
private Vector2 originalLocalPointerPosition;
|
|
|
|
|
private Vector3 originalPanelLocalPosition;
|
|
|
|
|
private RectTransform panelRectTransform;
|
|
|
|
|
private RectTransform parentRectTransform;
|
|
|
|
|
|
|
|
|
|
void Awake () {
|
|
|
|
|
panelRectTransform = transform.parent as RectTransform;
|
|
|
|
|
parentRectTransform = panelRectTransform.parent as RectTransform;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void OnPointerDown (PointerEventData data) {
|
|
|
|
|
originalPanelLocalPosition = panelRectTransform.localPosition;
|
|
|
|
|
RectTransformUtility.ScreenPointToLocalPointInRectangle (parentRectTransform, data.position, data.pressEventCamera, out originalLocalPointerPosition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void OnDrag (PointerEventData data) {
|
|
|
|
|
if (panelRectTransform == null || parentRectTransform == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
Vector2 localPointerPosition;
|
|
|
|
|
if (RectTransformUtility.ScreenPointToLocalPointInRectangle (parentRectTransform, data.position, data.pressEventCamera, out localPointerPosition)) {
|
|
|
|
|
Vector3 offsetToOriginal = localPointerPosition - originalLocalPointerPosition;
|
|
|
|
|
panelRectTransform.localPosition = originalPanelLocalPosition + offsetToOriginal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ClampToWindow ();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Clamp panel to area of parent
|
|
|
|
|
void ClampToWindow () {
|
|
|
|
|
Vector3 pos = panelRectTransform.localPosition;
|
|
|
|
|
|
|
|
|
|
Vector3 minPosition = parentRectTransform.rect.min - panelRectTransform.rect.min;
|
|
|
|
|
Vector3 maxPosition = parentRectTransform.rect.max - panelRectTransform.rect.max;
|
|
|
|
|
|
|
|
|
|
pos.x = Mathf.Clamp (panelRectTransform.localPosition.x, minPosition.x, maxPosition.x);
|
|
|
|
|
pos.y = Mathf.Clamp (panelRectTransform.localPosition.y, minPosition.y, maxPosition.y);
|
|
|
|
|
|
|
|
|
|
panelRectTransform.localPosition = pos;
|
|
|
|
|
}
|
|
|
|
|
}
|