[Компонент (Doc Unity)](https://docs.unity3d.com/2021.3/Documentation/Manual/script-GraphicRaycaster.html) [Класс (Doc Unity)](https://docs.unity3d.com/2019.1/Documentation/ScriptReference/UI.GraphicRaycaster.html) ![[Снимок экрана 2023-05-10 в 08.44.56.png|400]] Куда Добавляется: В тот gameobject, что является Canvas (добавлен компонент Canvas) GraphicRaycaster - это компонент Unity, который используется для обнаружения событий ввода на UI-GameObject. Он является частью системы событий ввода и нужен для определения, был ли UI-GameObject нажат, перетаскивается или выполняется другое действие с использованием указателя (мышь, касание и т. д.). GraphicRaycaster работает в связке с EventSystem для обработки ввода пользователей на UI-GameObject. ### Поля в инспекторе GraphicRaycaster **Ignore Reversed Graphics** Этот флажок определяет, будет ли GraphicRaycaster игнорировать графические объекты, которые обращены в противоположном направлении от камеры. Если включено, графические объекты, направленные в противоположную сторону, не будут реагировать на ввод. **Blocking Objects** Этот параметр определяет тип GameObject’ов, которые могут блокировать графические объекты от рейкастинга. То есть не пропускать через себя рейкастинг. У вас есть несколько вариантов: - None: Никакие gameobject’ы не блокируют графические объекты. - TwoD: Только коллайдеры 2D блокируют графические объекты. - ThreeD: Только коллайдеры 3D блокируют графические объекты. - All: Все коллайдеры (2D и 3D) блокируют графические объекты. **Blocking Mask** Этот параметр используется для определения, какие слои должны блокировать графический рейкастер при выполнении проверок, таких как определение, находится ли указатель мыши над элементом пользовательского интерфейса или нет. Те gameobject’ы, которые находится в блокирующих слоях, пропускают луч дальше. Однако эти самые gameobject’ы спокойно распознаются рейкастингом. По есть если на этот gameobject нажать (если он UI), то рейкастинг сработает. Суть данного параметра состоит в том, чтобы именно не пропускать через себя дальше луч (то есть блокировать) Когда GraphicRaycaster выполняет рейкаст, он будет проверять, находятся ли объекты на указанных слоях между указателем мыши и элементом пользовательского интерфейса. Если объекты на указанных слоях маски блокировки присутствуют, рейкаст будет считаться заблокированным и не пройдет через эти объекты. ### Что понимается под "графические объекты" Графические объекты (Graphic Objects) в контексте Unity UI - это элементы пользовательского интерфейса, которые отображаются на экране и могут взаимодействовать с пользователем. Они обычно являются дочерними объектами Canvas и включают такие элементы, как кнопки, текст, изображения, слайдеры и другие компоненты UI. Графические объекты используют компоненты, которые наследуются от базового класса UnityEngine.UI.Graphic, такие как Image, Text, RawImage и т. д. Эти компоненты определяют, как отображаются элементы интерфейса, и обрабатывают взаимодействия пользователя с ними, такие как нажатия, перетаскивание и другие события ввода. ### Как понять "блокировать" В контексте графического рейкастера в Unity, "блокировать" означает, что определенный объект или элемент пользовательского интерфейса (UI) может предотвратить выполнение рейкаста на элементы, находящиеся за ним. ### Чтобы использовать graphicRaycaster.Raycast нужно обязательно привязывать скрипт к canvas, в котором находятся UI-элементы? или можно к любому canvas привязать, даже к пустому? Чтобы использовать graphicRaycaster.Raycast(pointerEventData, results), вам нужно получить ссылку на GraphicRaycaster, который связан с Canvas, содержащим интересующие вас UI-элементы. Обычно GraphicRaycaster добавляется на тот же объект, что и компонент Canvas. Если вы привяжете скрипт к пустому Canvas, который не содержит интересующих вас UI-элементов, то GraphicRaycaster не сможет обнаружить их, и ваша реализация не будет работать должным образом. Вам нужно убедиться, что скрипт привязан к объекту Canvas, который содержит необходимые UI-элементы, чтобы GraphicRaycaster мог обнаружить их и выполнить рейкаст. ### GraphicRaycaster класс У класса всего 1 метод и 3 свойства (не считая унаследованных)  Как создать параметр в инспекторе с данным классом, чтобы вызывать перечисленные ниже мемберы. ```csharp [SerializeField] private GraphicRaycaster **graphicRaycaster**; ``` Смотри заметку «В чем разница между graphicRaycaster.Raycast и EventSystem.current.RaycastAll» ```csharp public void Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList) ```