Hello!
I want to cancel a drag and drop movement programmatically. Is there a way to do this?
I am using right now the interfaces IBeginDragHandler, IDragHandler, IEndDragHandler.
What I am trying to do: I want to cancel the dragging when I leave a certain area. So when I leave the OnEndDrag Method should be called and the drag is ended.
PS: Right now I have an internal variable to see if am still dragging and stop it if I leave the area. Right now, OnEndDrag is called twice. not really ideal.
using UnityEngine; using UnityEngine.UI; using System.Collections; using UnityEngine.EventSystems; public class DraggableCard : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public Text nameText; Vector3 startPosition; Transform startParent; bool dragging = false; public EventTrigger parentBox; void Start () { EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = EventTriggerType.PointerExit; entry.callback = new EventTrigger.TriggerEvent(); UnityEngine.Events.UnityAction<BaseEventData> callback = new UnityEngine.Events.UnityAction<BaseEventData>(PointerExit); entry.callback.AddListener(callback); parentBox.delegates.Add(entry); } public string Info { get { return nameText.text; } set { nameText.text = value; } } public void OnBeginDrag (PointerEventData eventData) { dragging = true; startPosition = transform.position; startParent = transform.parent; } public void OnDrag (PointerEventData eventData) { if (dragging) { Vector3 pos = transform.position; pos.x = eventData.position.x; transform.position = pos; } } public void OnEndDrag (PointerEventData eventData) { if (dragging) { StartCoroutine(SmoothMove (transform.position, startPosition,
0.2f));
dragging = false;} } public void PointerExit(BaseEventData data) { Debug.Log ("We Left!"); OnEndDrag (null); } }
Thanks,
Matthias