user-interface - 在 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 的层次结构相关的问题。下降被接受,一切都按预期工作。当我将它放在层次结构中较高的面板中(即,将呈现在我正在从中删除的面板下方的面板中)时,它会停止接受放置并按照我所期望的那样放置,如果它要放置在面板之外。
我不知道为什么会这样,并且非常感谢提供的任何帮助。
解决方案
UI 元素有一个Raycast Target
属性,您可以尝试在不可交互的元素上禁用该属性。
如果这不起作用,您还可以尝试根据您当前拖动的内容动态更改它。
推荐阅读
- kotlin - 如何将值从recyclerview复制到kotlin中的剪贴板?
- windows - 无法删除 Windows 上包含 .git 的文件夹
- java - 在控制台中显示百分比(JAVA)
- javascript - 允许 Origins 后出现 CORS 错误
- unit-testing - 如果没有直接从测试中调用,我如何等待未来在测试期间完成?
- reactjs - 在 createTheme 中覆盖 Box 组件
- powershell - 应用了运行 powershell 脚本的 GPO,但未进行更改
- nim-lang - 在 Nim 中迭代多个元组?
- database - 读取 500 万行加排序结构化数据的最快方法
- uml - 包括原始类型在内的所有 uml 数据类型是什么