所以我试图在屏幕上均匀分布 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 个或更少的项目,以及超过 20 像素的空白,我可以分配它们。但是,如果这是错误的(因此超过 4 张图像或少于 20 像素的空白),我想创建第二行并将第一行向上移动(现在它位于 Y 轴的 0 点上)。
我尝试了很多,但我似乎无法弄清楚。
编辑:添加了它当前所做的图像。