首页 > 解决方案 > 在 Unity 中检测 UI 面板内的下拉问题

问题描述

我正在尝试为我正在开发的游戏制作拖放库存系统。我正在使用该IDropHandler界面来检测跌落。我还使用该RectTransformUtility.RectangleContainsScreenPoint()功能来查看是否发生在 UI 面板中。

public void OnDrop(PointerEventData eventData)
{
     RectTransform itemPanel = transform as RectTransform;

     if (RectTransformUtility.RectangleContainsScreenPoint(itemPanel,eventData.position))
     {
          Debug.Log("dropped in box");
          AssignItem(dragDropInfo.GetDraggingItem().GetComponent<ItemPanel>().GetItemImage().GetItem());
          dragDropInfo.GetDraggingItem().GetComponent<ItemPanel>().GetItemImage().UnassignItem();
     }
}

这在大多数情况下都可以正常工作。然而,似乎存在与 UI 的层次结构相关的问题。下降被接受,一切都按预期工作。当我将它放在层次结构中较高的面板中(即,将呈现在我正在从中删除的面板下方的面板中)时,它会停止接受放置并按照我所期望的那样放置,如果它要放置在面板之外。

我不知道为什么会这样,并且非常感谢提供的任何帮助。

标签: user-interfaceunity3ddrag-and-drop

解决方案


UI 元素有一个Raycast Target属性,您可以尝试在不可交互的元素上禁用该属性。

如果这不起作用,您还可以尝试根据您当前拖动的内容动态更改它。


推荐阅读