Unity не игнорирует нажатие кнопки в слое «Игнорировать Raycast» - PullRequest
0 голосов
/ 04 октября 2018

Я создал новую сцену для проверки функциональности слоя 'Игнорировать Raycast' в единстве 2018.2.6f1.Сцена это просто кнопка пользовательского интерфейса с прикрепленным скриптом журналаКогда я меняю слой кнопки на «Игнорировать Raycast» , кнопка все еще работает.Все ли кнопки ведут себя таким образом, пока мы вручную не отключим флажки «Цель Raycast» и «Интерактивные» в компонентах «Изображение» и «Кнопка»?

Я хочу узнать зависимость между 3 параметрами: «Игнорировать Raycast», «Raycast»Цель '&' Взаимодействующий '.

Button inspector

1 Ответ

0 голосов
/ 04 октября 2018

Interactable легко.Если Graphic Raycaster находит на кнопке событие (наведение мыши, щелчок, отключение мыши и т. Д.), Реагирует ли оно на эти события?Если Interactable истинно, то будет.

Два других требуют некоторого объяснения.

Слои используются для обработки столкновений с Физикой лучевого вещания Unity.

Слой Ignore Raycast, как и любой другой слой, обычно предназначен для игнорирования лучевыми трансляциями Физики. Это зависит от кода, который создает лучевую трансляцию Физики, чтобы решить, действительно ли игнорируются коллайдеры на объектах в слое Ignore Raycast. Например, если вы создаете лучевую трансляцию Физики с маской Physics.IgnoreRaycastLayer, тогдаон будет сталкиваться только с коллайдерами объектов в слое Ignore Raycast.

Однако, опять же, этот параметр имеет дело с физическими лучевыми трансляциями

Raycast Target имеет дело с Unity Графика Raycaster - так Unity обрабатывает взаимодействие с элементами пользовательского интерфейса (по умолчанию).Графический Raycaster полностью независим от физики raycast и того, как он маскируется слоями.Вместо слоев, Graphic Raycaster позволяет контролировать столкновения двумя способами.

Первым из этих способов является то, что называется UI.GraphicRaycaster.BlockingObjects, которое останавливает лучевую трансляцию, когда он ударяется о 2d объекты или 3d объекты, оба или ни того, ни другого.

Второй из этих способов - это где Ignore Raycast вступает в игру.

Raycast Target элемента пользовательского интерфейса определяет, останавливаются ли в этом элементе радиопередачи, которые сталкиваются с этим элементом, поэтому с объектами под ним также не взаимодействуют.Если Raycast Target включено, то при наведении курсора мыши или нажатии кнопки или чего-либо еще он будет реагировать, однако настроен на это, , но все, что ниже кнопки , не будет имейте это событие взаимодействия.

Например, предположим, что вы хотите создать всплывающее окно, с которым можно взаимодействовать таким образом, чтобы они случайно не нажимали на кнопки под всплывающим окном.В этом случае вы захотите включить Raycast Target для всплывающего окна и его кнопок и т. Д.

TL; DR:

  • Interactable определяет, включена ли кнопка илиотключен сам по себе.
  • Raycast Target определяет, блокирует ли кнопка закрытые ею действия.
  • Ignore Raycast определяет, будет ли Physics raycasts игнорировать присоединенные к нему коллайдеры по умолчанию.
...