【发布时间】:2019-01-09 09:16:13
【问题描述】:
我有一个实现 IBeginDragHandler、IDragHandler、IEndDragHandler 的可拖动游戏对象(砖)
我还有另一个游戏对象(插槽)可以将砖块放入实现 IDropHandler
快速浏览一下 Bricks 的 OnBeginDrag 方法:
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;
}
当我将积木放入槽中时,积木将槽假定为父槽并假设槽位置,就像在 IDropHandler 的 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 在砖块位置而不是鼠标位置上工作?
谢谢 凯文
【问题讨论】:
标签: unity3d drag-and-drop