- Home /
Not detecting drop event
I'm doing a game in unity3d, and I need to drag and drop text components over other text components.
I have a canvas with a canvas group. Inside there are two panels with a Grid Layout Group. I'm loading programatically a component (prefab) consisting in a Panel and a Text, and then I'm adding it to his parent. I have 2 scripts, a ItemDragHandler and TextDropHandler, after adding these two handlers to my prefab, I get that the ItemDropHandler is never executing the OnDrop function. I have used these two scripts before and they have worked. I already disable the raycasts in my canvas group also programatically. I don't know what can be wrong because it already worked with an Image component.
public class TextDropHandler: MonoBehaviour, IDropHandler
{
public void OnDrop(PointerEventData eventData)
{
Debug.Log("Drop detectado"); //never shown in the Unity Debug
Texto txtDrag = ItemDragHandler.startParent.gameObject.GetComponent<SlotText>().texto;
Texto txtDrop = transform.gameObject.GetComponentInParent<SlotText>().texto;
DropTextTextContainer dttc = GetComponentInParent<DropTextTextContainer>();
if (dttc.verify(txtDrag, txtDrop) && !dttc.showNextText())
{
//Destroy(transform.parent.gameObject);
ItemDragHandler.destroyObject = true;
}
}
}
public class ItemDragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public static GameObject itemBeingDragged;
public static Transform startParent;
public static bool destroyObject;
Vector3 startPosition;
public void OnBeginDrag(PointerEventData eventData)
{
Debug.Log("Drag ha comenzado");
itemBeingDragged = gameObject;
startPosition = transform.position;
startParent = transform.parent;
GetComponentInParent<CanvasGroup>().blocksRaycasts = false;
}
public void OnDrag(PointerEventData eventData)
{
transform.position = Input.mousePosition;
}
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log("Drag finalizado");
if (destroyObject)
{
Destroy(startParent.gameObject);
destroyObject = false;
}
itemBeingDragged = null;
startParent = null;
if(transform.parent != startParent) {
transform.position = startPosition;
}
GetComponentInParent<CanvasGroup>().blocksRaycasts = true;
}
}
I expect the drop function to be executed when I drag an object into the other.
Your answer
Follow this Question
Related Questions
OnBeginDrag, OnEndDrag not being called for unknown reasons 1 Answer
How to drag Unity Objects to other c# application 0 Answers
OnDrop never gets called 1 Answer
Dragging and Dropping GUITexture by TOUCH 0 Answers
How to move UI image between panels 0 Answers