以2D均匀分布

时间:2018-09-17 07:11:51

标签: c# unity3d 2d distribute evenly

因此,我试图在屏幕上均匀分配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点)。

我尝试了很多,但似乎无法弄清。

编辑:添加了当前功能的图片。

1 个答案:

答案 0 :(得分:0)

您应该将Android与具有GridLayoutGroupLayoutElement组件的预制件一起使用。

您将必须实例化预制件,并使它成为具有PageObjectBase组件的GameObject的子代。

这样,您可以通过访问GridLayoutGroup为每个对象设置所需的图像,而PageObjectBase将负责图像的布局。