Так что я пытаюсь распределить 2D предметы равномерно по экрану.
Прямо сейчас у меня это работает таким образом, что я выбираю все элементы, и он вычисляет размер холста, а затем вычисляет все ширины объектов вместе, чтобы увидеть, сколько пробелов у него есть. Затем я равномерно распределяю их с нужным количеством пробелов между объектами. Работает отлично. Однако, как только я получаю более 4 предметов или у меня недостаточно пробелов (например, объекты слишком велики), я хочу создать вторую строку и переместить первую строку вверх.
Ниже мой код.
public static void DistEvenly(PageObjectBase pageObject)
{
//List for objects
List<PageObjectBase> objectList = new List<PageObjectBase>();
float combinedWidth = 0;
PageObjectGroup group = (PageObjectGroup) pageObject;
//Start position is the left side of workField
float leftStartPosition = -Config.DefaultWorkfieldSize.x / 2;
int objectCount =0;
//For every object add it to list and calculate width and add it to combinedWidth
foreach (PageObjectBase objectBase in group.Children)
{
objectList.Add(objectBase);
float imageWidth = objectBase.BoxCollider.size.x * objectBase.transform.localScale.x;
combinedWidth = combinedWidth + imageWidth;
}
//whiteSpace is the remaining white space on the screen
float whiteSpace = Config.DefaultWorkfieldSize.x - combinedWidth;
//For each object place it at left start position and calculate the space between each image.
foreach (PageObjectBase objectBase in group.Children)
{
if (whiteSpace > 20 && objectList.Count <= 4)
{
objectCount = objectList.Count + 1;
objectBase.Move(leftStartPosition + whiteSpace / objectCount + objectBase.GetBoundsSize().x / 2, 0);
Debug.Log("I should now distribute them evenly!");
leftStartPosition = GetRightEdge(objectBase);
}
}
}
}
Таким образом, как вы можете видеть, он получает количество изображений в списке, вычисляет оставшиеся пробелы и, если существует не более 4 элементов или меньше, и пробелов больше, чем я могу их распределить. Однако, если это неверно (более 4 изображений или менее 20 пикселей в пустом пространстве), я хочу создать вторую строку и переместить первую строку вверх (сейчас это точка 0 на оси Y).
Я много пробовал, но, похоже, не могу понять.
РЕДАКТИРОВАТЬ : Добавлено изображение того, что он делает в настоящее время.