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");
}
(!isObjectGrabbed)
in theOnBeginDrag
? \$\endgroup\$