Инициировать событие Drag при создании объекта

У меня есть кнопка, при зажатии на которой клавиши (Input.GeyKey()), создаёт в точке другой объект из префаба. Создаваемый объект использует EventSystem для DragAndDrop. Но при создании, событие Drag не срабатывает. Насколько я понимаю, для перетягивания должно произойти событие нажатия клавиши, которое уже произошло до создания объекта. Как сделать так, чтобы создаваемый объект следовал за мышью как при DragAndDrop и при этом после прекращения перетаскивания срабатывал OnEndDrag()? Скорее всего это проще сделать через инициирование события в скрипте, но как это правильно сделать? Я пробовал просто вызывать соответствующие методы в корутине.

    public void OnPointerDown(PointerEventData eventData)
    {
        var card = TakeCard();
        StartCoroutine(DragInvoker(card, eventData));
    }

    IEnumerator DragInvoker(Card card, PointerEventData eventData)
    {
        eventData.pointerDrag = card.gameObject;
        ExecuteEvents.beginDragHandler.Invoke(card, eventData);
        while (Input.GetKey(KeyCode.Mouse0))
        {
            ExecuteEvents.dragHandler.Invoke(card, eventData);
            yield return new WaitForEndOfFrame();
        }
        ExecuteEvents.endDragHandler.Invoke(card, eventData);
    }

Но тогда eventData изменяется только для этих методов, что логично, и не меняется для всего движка, потому аналогичные методы у других объектов (вроде OnPointerEnter()) не "узнают" про то, что перемещается созданный объект. Как тогда сделать так, чтобы создаваемый объект следовал за мышью как при DragAndDrop и все методы EventSystem работали корректно?


Ответы (0 шт):