Каков самый элегантный способ позволить объектам пользовательского интерфейса поглощать прикосновения в Unity 5?

В моей игре используется новая система пользовательского интерфейса Unity 5 с холстом. Сама игра может получать касания для стрельбы боеприпасами с помощью функций OnMouseDown() на нескольких игровых объектах с 2D-коллайдерами, указывающими области касания, и я могу настроить приоритеты различных областей касания, изменяя положение игровых объектов.z.

Однако с добавленным пользовательским интерфейсом любые прикосновения к элементам пользовательского интерфейса (кнопкам, панелям и т. д.) не только (если возможно) будут запускать элементы пользовательского интерфейса, но также могут проходить через элементы пользовательского интерфейса и вызывать сенсорные области. Это очень странно, когда вы нажимаете кнопку, не только кнопка нажимается, но и запускает действие стрельбы за (визуально) «слоем пользовательского интерфейса».

Я могу придумать один из способов — добавить коллайдер к элементам пользовательского интерфейса, затем во время выполнения изменить его положение и размер в мировом пространстве и настроить его значение position.z, чтобы поглощать все касания, которые есть в пользовательском интерфейсе. Однако это выглядит очень некрасиво и небезопасно.

Есть ли какой-нибудь элегантный способ позволить всем элементам пользовательского интерфейса (в основном панелям) поглощать прикосновения? Спасибо!


person ArtS    schedule 13.02.2016    source источник
comment
это миллиард раз дублируется в Интернете. Вы могли бы сэкономить огромное время, просто выполнив поиск. это самая фундаментальная, повседневная проблема во всем Unity. answers.unity3d.com/questions/784617/   -  person Fattie    schedule 15.02.2016
comment
Возможный дубликат регистрации касания в пользовательском интерфейсе в Unity   -  person Fattie    schedule 15.02.2016
comment
@Joe Blow Большое спасибо за очень полезную ссылку! Я провел некоторые исследования, прежде чем поднимать вопрос, но не нашел актуальной и полезной информации. Либо потому, что мой английский отстой, либо мои навыки поиска отстой. Может оба XD   -  person ArtS    schedule 17.02.2016


Ответы (1)


Вы можете просто использовать 2D или 3D физический raycaster на камере, чтобы добиться этого. У BoredMormon есть отличное 5-минутное видео о том, как это сделать, я бы порекомендовал его посмотреть! https://www.youtube.com/watch?v=EVZiv7DLU6E

person Ageonix    schedule 13.02.2016