Добавление Unity к преобразованию заходит слишком далеко

#c# #unity3d

#c# #unity3d

Вопрос:

У меня есть форма, и я хочу сместить входные данные / дочерние элементы формы вниз, чтобы при необходимости отображать сообщение об ошибке.

Я могу перебирать дочерние элементы, и я просто хочу сместить каждый из них на 20 пикселей вниз, что примерно соответствует высоте текста ошибки, но ввод перемещается примерно на 3000 вниз по оси x. Я уверен, что будет очевидно, что я делаю неправильно.

 foreach (Transform child in Form.transform)
{
    Vector3 p = child.position;
    Debug.Log(child.name);
    p.x  = 20f;
    child.position = p;
}
  

Комментарии:

1. Имейте в виду, что размер каждой единицы unity составляет 100 пикселей в зависимости от настроек камеры по умолчанию, поэтому к 20f вы фактически перемещаете их на 2000 пикселей

Ответ №1:

Вот альтернативный подход:

  • в вашем интерфейсе создайте панель, вид прокрутки или любой другой контейнер для хранения вашего пользовательского интерфейса
  • добавьте группу вертикальной компоновки, скажите, хотите ли вы размещать элементы вертикальным способом
  • добавьте отключенный элемент управления заполнителем, например, a Text или что-то еще
  • всякий раз, когда вы хотите отобразить ошибку, включите этот элемент управления с соответствующим содержимым

Система компоновки позаботится о смещении позиций всех элементов за вас.

Комментарии:

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

2. Иногда бывает сложно сделать это правильно, не забывайте, что вы можете добавить элемент layout в свой prefab, чтобы на него не повлияла родительская группа layout.