#UI-GD [Doc Unity](https://docs.unity3d.com/ScriptReference/RectTransformUtility.html) RectTransformUtility является вспомогательным классом в Unity, предоставляющим набор статических функций для работы с прямоугольниками преобразований (RectTransforms). Вот все методы, предоставляемые этим классом: ##### ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint) Этот метод преобразует точку на экране в локальную точку в прямоугольнике rect. Возвращает true, если операция успешна, иначе false. Значение localPoint содержит локальную точку в прямоугольнике. Аргумент cam указывает камеру, используемую для преобразования экранных координат. ##### ScreenPointToRay(Camera cam, Vector2 screenPos) Этот метод преобразует экранные координаты в луч, исходящий из камеры cam. Возвращает Ray, который исходит из камеры через указанную экранную позицию. ##### ScreenPointToWorldPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector3 worldPoint) Этот метод преобразует экранную точку в мировую точку в прямоугольнике rect. Возвращает true, если операция успешна, иначе false. Значение worldPoint содержит мировую точку в прямоугольнике. Аргумент cam указывает камеру, используемую для преобразования экранных координат. ##### PixelAdjustPoint(Vector2 point, Transform elementTransform, Canvas canvas) Этот метод выполняет поправку на пиксель для указанной точки на канвасе. Возвращает поправленную точку. "Поправка" в данном контексте означает корректировку или изменение позиции точки или границ прямоугольника, чтобы они лучше соответствовали пиксельной сетке экрана. При отображении UI-элементов на экране, их позиция может не совсем соответствовать пиксельной сетке экрана из-за разницы между координатами канваса и физическими пикселями экрана. Это может привести к размытию границ или текстур элементов интерфейса. Методы PixelAdjustPoint и PixelAdjustRect корректируют позицию точки или прямоугольника, чтобы они были выровнены с пиксельной сеткой экрана. Это делается путем округления координат до ближайшего значения, соответствующего пиксельной сетке. В результате, UI-элементы становятся более четкими и отображаются без размытия. ##### PixelAdjustRect(RectTransform rectTransform, Canvas canvas) Этот метод выполняет поправку на пиксель для указанного прямоугольника преобразования на канвасе. Возвращает поправленный прямоугольник. ```csharp public static bool RectangleContainsScreenPoint( RectTransform rect, Vector2 screenPoint ) public static bool RectangleContainsScreenPoint( RectTransform rect, Vector2 screenPoint, Camera cam ) ``` Этот метод проверяет, содержит ли прямоугольник rect указанную экранную точку. Возвращает true, если точка находится внутри прямоугольника, иначе false. <u>Про камеру:</u> Аргумент cam указывает камеру, используемую для преобразования экранных координат. Когда я указал камеру как Camera.main, то меня данный метод всегда возвращал false, даже если мышка была над нужным Rectangle. Однако, когда я использовал метод с сигнатурой без камеры, то метод начал работать корректно. GPT4 не смог мне помочь, но я нашел [тему](https://discussions.unity.com/t/whats-wrong-with-recttransformutility-rectanglecontainsscreenpoint-camera-argument/582295) на форуме, где некий разраб жалуется на ту же проблему. Там ему подсказали, что метод с сигнатурой камеры не работает, когда в компоненте Canvas установлен Render Mode как Screen Space - Overlay ##### FlipLayoutOnAxis(RectTransform rect, int axis, bool keepPositioning, bool recursive) Этот метод инвертирует макет для указанного прямоугольника преобразования по оси X (axis = 0) или Y (axis = 1). Если keepPositioning равно true, позиция элементов сохраняется. Если recursive равно true, метод будет применяться рекурсивно ко всем дочерним объектам. Другими словами, этот метод позволяет "отразить" элементы интерфейса по горизонтали или вертикали. Если keepPositioning установлено в true, элементы сохранят свою позицию относительно своего родительского объекта, иначе их позиция будет изменена на противоположную сторону. Если recursive установлено в true, то все дочерние элементы также будут изменены в соответствии с настройками. ##### FlipLayoutAxes(RectTransform rect, bool keepPositioning, bool recursive) Этот метод похож на предыдущий, но инвертирует элементы интерфейса по обеим осям одновременно. Он также позволяет контролировать сохранение позиции и рекурсивное применение с помощью аргументов keepPositioning и recursive.