У меня есть холст пользовательского интерфейса с режимом мирового пространства рендеринга. Для всех элементов пользовательского интерфейса, которые принадлежат этому холсту, я вижу переменные "слева", "справа", "верх" и "нижний" в компоненте 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 нормализованы, поэтому вам нужно будет масштабировать их, умножив размер экрана.