123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- 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;
- }
- }
|