У меня есть перетаскиваемый игровой объект (кирпич), который реализует IBeginDragHandler, IDragHandler, IEndDragHandler
У меня также есть другой игровой объект (слот), в который можно поместить кирпич, который реализует IDropHandler
Беглый взгляд на метод OnBeginDrag в Bricks:
public static GameObject itemBeingDragged;
Vector3 startPosition;
Transform startParent;
public void OnBeginDrag(PointerEventData eventData)
{
itemBeingDragged = gameObject;
startPosition = transform.position;
startParent = transform.parent;
GetComponent<CanvasGroup>().blocksRaycasts = false;
GetComponent<BoxCollider2D>().enabled = false;
}
Когда я опускаю кирпич в слот, кирпич принимает слот в качестве родителя, а также принимает положение слотов, как в коде метода IDDHandler OnDrop:
public void OnDrop(PointerEventData eventData)
{
DragHandler.itemBeingDragged.transform.SetParent(transform);
DragHandler.itemBeingDragged.transform.position = transform.position;
}
Проблема в том, что когда я перетаскиваю кирпичик, я хочу, чтобы он был слегка смещен относительно позиции кирпичей (например, на мобильном телефоне, чтобы при перетаскивании кирпича кирпич не скрывался визуально моим пальцем). )
Итак, в коде Bricks OnDrag у меня есть что-то подобное для визуального смещения:
public void OnDrag(PointerEventData eventData)
{
Vector3 offset = new Vector3(0, 100, 0);
transform.position = Input.mousePosition + offset;
}
Я знаю, что выше для положения мыши, но в конечном итоге я хочу, чтобы это было положение касания.
При перетаскивании это выглядит хорошо, однако при перетаскивании его в слот метод OnDrop слота вызывается только тогда, когда указатель мыши находится над слотом, а не когда кирпич находится над слотом. То есть, когда я отпускаю перетаскивание, когда кирпич находится над слотом, OnDrop не вызывается. Он вызывается только тогда, когда я отпускаю кирпич снаружи слота таким образом, чтобы указатель мыши находился внутри слота. Имеет смысл?
Есть ли способ заставить OnDrop работать с положением кубиков, а не с мышью?
Спасибо
Kevin