0
\$\begingroup\$

Can I activate the OnDrag and OnEndDrag trough the OnPointerClick handler to start dragging or something like that? Like I have an Idea where I set a bool variable in my code and if is false start dragging if true stops dragging. I tried to make the code without IDrag interface but since I did not work I need to use it,

I have originaly this code:

public class InventoryUIInteraction : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
    {
        [SerializeField] GameObject ClickedItemUI;
        private RectTransform canvasRectTransform;
        public Transform draggedItemParent;
        public Transform draggedItem;
    
        private void Start()
        {
            // Encontra o objeto de canvas em tempo de execução
            Canvas canvas = FindObjectOfType<Canvas>();
            if (canvas != null)
            {
                canvasRectTransform = canvas.GetComponent<RectTransform>();
            }
        }
    
        public void OnBeginDrag(PointerEventData eventData)
        {
            if (transform.parent.GetComponent<Slot>().ItemInSlot == null)
                return;
    
            print("Begin Drag");
    
            draggedItemParent = transform.parent;
            draggedItem = draggedItemParent.GetComponentInChildren<Image>().transform;
            //draggedItemParent.GetComponentInChildren<TextMeshProUGUI>().enabled = false;
    
            draggedItem.SetParent(FindObjectOfType<Canvas>().transform, false);
        }
    
    
        public void OnDrag(PointerEventData eventData)
        {
            print("Dragging");
            draggedItem.position = Input.mousePosition;
            draggedItem.GetComponent<Image>().raycastTarget = false;
        }
    
        public void OnEndDrag(PointerEventData eventData)
        {
            draggedItem.parent = draggedItemParent;
            draggedItem.localPosition = new Vector3(0, 0, 0);
            draggedItem.GetComponent<Image>().raycastTarget = true;
            //draggedItemParent.GetComponentInChildren<TextMeshProUGUI>().enabled = true;
            draggedItemParent.GetComponent<Slot>().SetStats();
            draggedItem = null;
            draggedItemParent = null;
            print("End Drag");
    
        }

that my items change slot but only while my mouse button is held down"Dragging", therefore not how I want, I want to when I click if "IsObjectBeingDragged" false to start dragging if it's true to stop it

Currently I tried this code, but It did not work:

private bool isObjectGrabbed = false;
private void Start()
{
    // Encontra o objeto de canvas em tempo de execução
    Canvas canvas = FindObjectOfType<Canvas>();
    if (canvas != null)
    {
        canvasRectTransform = canvas.GetComponent<RectTransform>();
    }
}

public void OnPointerClick(PointerEventData eventData)
{
    if (transform.parent.GetComponent<Slot>().ItemInSlot == null)
        return;

    print("Begin Drag");
    if (!isObjectGrabbed)
    {
        draggedItemParent = transform.parent;
        draggedItem = draggedItemParent.GetComponentInChildren<Image>().transform;
        //draggedItemParent.GetComponentInChildren<TextMeshProUGUI>().enabled = false;

        draggedItem.SetParent(FindObjectOfType<Canvas>().transform, false);
        // draggedItemParent.GetComponentInChildren<TextMeshProUGUI>().enabled = false;

        isObjectGrabbed = true;
        ExecuteEvents.Execute(draggedItem.gameObject, eventData, ExecuteEvents.dragHandler);
        return;
    }

    ExecuteEvents.Execute(draggedItem.gameObject, eventData, ExecuteEvents.endDragHandler);
}
public void OnDrag(PointerEventData eventData)
{
    print("Dragging");
    draggedItem.position = Input.mousePosition;
    draggedItem.GetComponent<Image>().raycastTarget = false;
}

public void OnEndDrag(PointerEventData eventData)
{
    draggedItem.SetParent(draggedItemParent, false);
    draggedItem.localPosition = Vector3.zero;
    draggedItem.GetComponent<Image>().raycastTarget = true;
    // draggedItemParent.GetComponentInChildren<TextMeshProUGUI>().enabled = true;
    draggedItemParent.GetComponent<Slot>().SetStats();
    draggedItem = null;
    draggedItemParent = null;
    print("End Drag");
}
\$\endgroup\$
2
  • \$\begingroup\$ Is there a reason you just can't have the (!isObjectGrabbed) in the OnBeginDrag? \$\endgroup\$
    – Zibelas
    May 30 at 8:44
  • \$\begingroup\$ what do you mean? because I want the drag action to start once I click not while I hold my mouse down(I dont know if I interpreted right) \$\endgroup\$
    – Jamelaumn
    May 30 at 13:11

0

You must log in to answer this question.

Browse other questions tagged .