【发布时间】:2019-08-20 15:37:50
【问题描述】:
我有一个主要基于this tutorial 的库存系统,我目前正在修改该系统。 OnBeginDrag 和 OnEndDrag 按预期工作,但 OnDrag 虽然不断更新项目的位置,但不显示项目。它会在OnDrag 期间消失,并在它被放入新插槽后重新出现。
这是我的层次结构:
值得注意的是两个摄像头。据我所知,DungeonGroup(和DungeonUICanvas)使用DungeonCamera。 (直到最近,DungeonGroup 还是一个完全不同的场景。OnDrag 在我整合场景之前按预期工作,这让我认为相机问题可能是罪魁祸首。)
这是我目前正在使用的代码:
public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public static GameObject item; //itemBeingDragged
public static Vector3 startPosition;
public static Transform startParent;
public void OnBeginDrag(PointerEventData eventData)
{
item = gameObject;
startPosition = transform.position;
startParent = transform.parent;
GetComponent<CanvasGroup>().blocksRaycasts = false;
transform.SetParent(transform.root);
}
public void OnDrag(PointerEventData eventData)
{
transform.position = Input.mousePosition;
}
public void OnEndDrag(PointerEventData eventData)
{
item = null;
if (transform.parent == startParent || transform.parent == transform.root)
{
transform.position = startPosition;
transform.SetParent(startParent);
}
GetComponent<CanvasGroup>().blocksRaycasts = true;
}
}
【问题讨论】:
-
Input.mousePosition有z=0是不是离相机太近了? -
@derHugo 不幸的是,没有骰子。我的
DungeonCamera有一个z或-10,以允许它在z=0显示各种TileGrids。 (即便如此,我只是测试了一下,以防你解决了它,在这种情况下,我会感谢你并要求你发布答案以便我接受它:) -
可能原因是
transform.SetParent(transform.root);?transform.root还是Canvas吗?如果层次结构中不在Canvas下,则 UI 元素不可见
标签: c# unity3d eventhandler unity-ui