RectTransform узнать ширину и высоту между якорями

81
22 февраля 2022, 04:00

Как узнать высоту между якорями, если они сделаны во весь блок, с авто-подстройкой, при смене разрешения.

Так-как RectTransform.sizeDelta возвращает {0,0} когда якоря на весь блок, то при расчетах ниже, точки появляются в центре, за место того, чтобы появиться там, где указан TargetPosition.

Чем можно заменить такой код:

Vector3 CorrectPosition = TargetPosition + OffSet;
Vector2 vp2 = MapCamera.WorldToViewportPoint(CorrectPosition);
Vector2 position = new Vector2(
   (vp2.x * Rect.sizeDelta.x) - (Rect.sizeDelta.x * 0.5f), 
   (vp2.y * Rect.sizeDelta.y) - (Rect.sizeDelta.y * 0.5f)
);
if (OffScreen) {
    position.x = Mathf.Clamp(position.x, -((Rect.sizeDelta.x * 0.5f) - BorderOffScreen), ((Rect.sizeDelta.x * 0.5f) - BorderOffScreen));
    position.y = Mathf.Clamp(position.y, -((RectRoot.sizeDelta.y * 0.5f) - BorderOffScreen), ((Rect.sizeDelta.y * 0.5f) - BorderOffScreen));
}
float size = Size;
if (position.x == (Rect.sizeDelta.x * 0.5f) - BorderOffScreen || position.y == (Rect.sizeDelta.y * 0.5f) - BorderOffScreen ||
    position.x == -(Rect.sizeDelta.x * 0.5f) - BorderOffScreen || -position.y == (Rect.sizeDelta.y * 0.5f) - BorderOffScreen) {
    size = OffScreenSize;
} else {
    size = Size;
}

Чтобы правильно считались позиции?
Никак не могу найти решение, это было последнее, что я написал и пытался исправить.

Answer 1

ну попробуй так

RectTransform rt = GetComponent<RectTransform>();
RectTransform parent = (RectTransform)rt.parent;
Vector2 parentSize = parent.rect.size;
Vector2 d = rt.anchorMax - rt.anchorMin;
float width = d.x * parentSize.x;
float heigh = d.y * parentSize.y;
Debug.Log("width: " + width.ToString());
Debug.Log("height: " + heigh.ToString());

использовал размеры родителя, потому что якорьки напрямую зависят от него

Answer 2

Вопрос решен через добавление спрайта и слоя к элементу, а после чего, просто скрываем слой на основной камере и показываем на второй камере.

READ ALSO
Бесконечная сборка проекта в Visual Studio

Бесконечная сборка проекта в Visual Studio

Проект отлично работалПосле того, как удалил DevExpress 11 и поставил версию 13

72
ADO.NET edm отсутствует в Visual Studio

ADO.NET edm отсутствует в Visual Studio

Вы можете столкнуться с тем, что при попытке добавить к своему проекту в Visual Studio модель ADONET EDM, вы ее не найдете в списке доступных элементов

89
Некорректная работа Physics2D.OverlapCapsuleAll

Некорректная работа Physics2D.OverlapCapsuleAll

Всем доброго времени суток! Делаю на unity игру, решил использовать функцию Physics2DOverlapCapsuleAll, так как она лучше всего подходит для моих целей

76