Как получить доступ к RectTransform левой, правой, верхней, нижней позиции через код?

У меня есть холст пользовательского интерфейса с режимом мирового пространства рендеринга. Для всех элементов пользовательского интерфейса, которые принадлежат этому холсту, я вижу переменные "слева", "справа", "верх" и "нижний" в компоненте RectTransform в редакторе. Любые способы доступа к этим переменным через код?

Ответ 1

Это будут

RectTransform rectTransform;

/*Left*/ rectTransform.offsetMin.x;
/*Right*/ rectTransform.offsetMax.x;
/*Top*/ rectTransform.offsetMax.y;
/*Bottom*/ rectTransform.offsetMin.y;

Ответ 2

RectTransform rt = GetComponent<RectTransform>();
float left   =  rt.offsetMin.x;
float right  = -rt.offsetMax.x;
float top    = -rt.offsetMax.y;
float bottom =  rt.offsetMin.y;

TL; DR

Из значений, отображаемых в Инспекторе, мой анализ таков: Left, Right, Top и Bottom являются положительными, если соответствующие границы находятся в прямоугольнике, сформированном якорями RectTransform.

offsetMin.x как Left и offsetMin.y как Bottom всегда выполняют эту оценку, однако offsetMax.x как Right и offsetMax.y, поскольку Top не делает.

Я просто принял противоположные значения offsetMax, чтобы сделать его совместимым (базовая модификация пространства).

Ответ 3

Вышеуказанные два ответа на правильном пути, я откладывал на своем проекте из-за этого, но обнаружил, что программирование в постели. СмещениеMin и offsetMax - это то, что вам нужно, но они не все, вам нужно включить якоря из прямого преобразования:

public RectTransform recTrans;

// Use this for initialization
void Start () {
    Vector2 min = recTrans.anchorMin;
    min.x *= Screen.width;
    min.y *= Screen.height;

    min += recTrans.offsetMin;

    Vector2 max = recTrans.anchorMax;
    max.x *= Screen.width;
    max.y *= Screen.height;

    max += recTrans.offsetMax;

    Debug.Log(min + " " + max);
}

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

Как это работает, должно быть очевидно, но небольшое объяснение не повредит.

Смещения относятся к разности в позиции min и max от центральной точки прямоугольного преобразования, добавляя их к привязным границам, дает правильное прямоугольное преобразование min и max. Хотя якорь min и max нормализованы, поэтому вам нужно будет масштабировать их, умножив размер экрана.