Инициировать событие 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 работали корректно?