这个问题有很多解决方案,但它们似乎都不适合我。我有一个按钮,可以打开 UI 元素中的选择列表,我希望它在单击它外部时关闭。我目前有这个:
private void OnEnable()
{
EventSystem.current.SetSelectedGameObject(gameObject);
}
public void OnDeselect(BaseEventData eventData)
{
//Close the Window on Deselect only if a click occurred outside this panel
if (!mouseIsOver)
gameObject.SetActive(false);
}
public void OnPointerEnter(PointerEventData eventData)
{
mouseIsOver = true;
EventSystem.current.SetSelectedGameObject(gameObject);
}
public void OnPointerExit(PointerEventData eventData)
{
mouseIsOver = false;
EventSystem.current.SetSelectedGameObject(gameObject);
}
这在 PC 上运行良好,但不幸的是,由于移动设备上没有实际的指针,即使在内部单击它也会关闭面板。我试过使用这样的东西:
foreach (Touch touch in Input.touches)
{
int id = touch.fingerId;
if (EventSystem.current.IsPointerOverGameObject(id))
{
isClicked = true;
}
if (Input.GetMouseButtonDown(0))
{
// Check if the mouse was clicked over a UI element
if (EventSystem.current.IsPointerOverGameObject())
{
isClicked = true;
}
}
}
但这也没有奏效。这似乎是一个非常简单的问题,我不明白为什么我找不到一个简单的解决方案。