wie zu stoppen, Ziehen Sie Veranstaltung in OnBeginDrag() in unity 4.6
Ich habe ein Skript, dass die Griffe ziehen von Elementen von und zu einem bestimmten slot. Aber ich möchte hinzufügen, eine Funktion zum stoppen ziehen einer bestimmten Elementen. ich denke, der beste Ort, dies zu tun ist in der OnBeginDrag
Methode, aber kann nicht scheinen, um einen Weg zu stoppen/Abbrechen, ziehen Sie die Veranstaltung selbst, hier ist ein wenig von meinem code
public class SlotBehaviour : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler, IDragHandler, IEndDragHandler,IPointerClickHandler
{
public void OnBeginDrag(PointerEventData eventData)
{
if (eventData.button != PointerEventData.InputButton.Left)
{
return;
}
if (this.Empty) return;
var canvas = imageItem.canvas;
if (canvas == null) return;
GUIManager.mouseBusy = true;
//We have clicked something that can be dragged.
//What we want to do is create an icon for this.
m_DraggingIcon = new GameObject("icon");
m_DraggingIcon.transform.SetParent(canvas.transform, false);
m_DraggingIcon.transform.SetAsLastSibling();
var image = m_DraggingIcon.AddComponent<Image>();
//The icon will be under the cursor.
//We want it to be ignored by the event system.
m_DraggingIcon.AddComponent<IgnoreRaycast>();
image.sprite = imageItem.sprite;
image.rectTransform.sizeDelta = imageItem.rectTransform.sizeDelta;
m_DraggingPlane = transform as RectTransform;
SetDraggedPosition(eventData);
}
public void OnDrag(PointerEventData data)
{
if (m_DraggingIcon != null)
SetDraggedPosition(data);
}
private void SetDraggedPosition(PointerEventData data)
{
if (data.pointerEnter != null && data.pointerEnter.transform as RectTransform != null)
m_DraggingPlane = data.pointerEnter.transform as RectTransform;
var rt = m_DraggingIcon.GetComponent<RectTransform>();
Vector3 globalMousePos;
if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DraggingPlane, data.position, data.pressEventCamera, out globalMousePos))
{
rt.position = globalMousePos;
rt.rotation = m_DraggingPlane.rotation;
}
}
public void OnEndDrag(PointerEventData eventData)
{
if (m_DraggingIcon != null)
{
Destroy(m_DraggingIcon);
}
GUIManager.mouseBusy = false;
//if you drop it somewhere where its not wanted(or just nowhere)
if (eventData.used == false)
{
if (eventData.pointerCurrentRaycast.gameObject == null)//if its nowhere offer to drop it on ground
{
GUIManager.instance.DropItem((int)ItemsDatabase.container[containerID].items[indexInContainer]);
}
}
}
}
Ich habe versucht, die Rückgabe der Methode früher, aber es nicht tun, müssen wahrscheinlich etwas zu tun mit den event-Daten...ich werde dankbar, wenn Sie mir sagen, wie Sie damit umgehen.
- HINWEIS - hier ist ein extrem voll, eine elegante Lösung für drag/drop .. genießen Sie stackoverflow.com/a/37473953/294884
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen, die fahne (zum Beispiel, IsDragable). Für Gegenstände, die Sie donn ' T wollen, um drag&drop Sie sind zur Rückgabe von drag-event-Handler:
Andere Lösung ist das deaktivieren BlockRaycast in CanvasGroup Komponente.
Nur mit "return" nicht nichts kündigen.
Stattdessen können Sie ändern Sie die PointerEventData info, die übergeben wird in der OnBeginDrag Funktion - legen Sie insbesondere pointerDrag auf null. Dies bricht den ziehen:
pointerDrag
zunull
tut, in der Tat verhindern, dass die OnDrag und OnEndDrag-Ereignisse von selbst gehoben. Danke!