Я делаю игру в unity3d, и мне нужно перетаскивать текстовые компоненты поверх других текстовых компонентов.
У меня есть холст с группой холстов. Внутри находятся две панели с Grid Layout Group . Я загружаю программно компонент (prefab), состоящий из Panel и Text, а затем добавляю его к его родителю. У меня есть 2 сценария, ItemDragHandler и TextDropHandler , после добавления этих двух обработчиков в мой префаб я получаю, что ItemDropHandler никогда не выполняет функцию OnDrop . Я использовал эти два сценария раньше, и они сработали. Я уже отключил raycast в моей группе холстов также программно.
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;
}
}
Я ожидаю, что функция перетаскивания будет выполнена, когда я перетаскиваю объект в другой.