Я заметил, что щелчки мышью на моем пользовательском интерфейсе также вызывают Unity OnMouseDown
и подобные события, если за ними находятся объекты мирового пространства.
Исследования привели меня к EventSystems.current.IsPointerOverGameObject()
, что документы Unity не очень хорошо объясняют.
Согласно объяснениям, он должен возвращать true , когда указатель находится над объектом пользовательского интерфейса , но это не мой опыт.
При использовании он возвращает false
при использовании одного Collider2D, true
при использовании другого объекта и true
при использовании объекта пользовательского интерфейса.
Я не понимаю, какую логику он использует, чтобы определить, когда показывать true против false. Он плохо назван, потому что все является «GameObject».
Если я могу выяснить, что является причиной неправильной информации, я могу это исправить.
В противном случае мне нужен альтернативный способ игнорировать щелчки в мировом пространстве, когда кто-то щелкает в любом месте элемента пользовательского интерфейса.
Редактировать: Похоже, что EventSystem.current.currentSelectedGameObject != null
является более ценным показателем. Это значение имеет фактический объект пользовательского интерфейса, когда происходит щелчок, но не для объектов без пользовательского интерфейса. Это полезно только в OnMouseDown
и OnMouseDrag
, поскольку его значение существует только при нажатии.