#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.