【问题标题】:Distribute evenly in 2D二维均匀分布
【发布时间】:2019-02-21 01:40:09
【问题描述】:

所以我试图在屏幕上均匀分布 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 点上)。

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

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

【问题讨论】:

  • 谁能帮帮我?
  • 在我看来,您正在尝试重新发明GridLayoutGroup。您知道 Unity 中已经存在并且运行良好吗?
  • 我看到它经过,但无法让它工作。我的对象在运行时被实例化,它们的父对象也是如此。我的子对象上方有 4 个父对象,它们都在运行时被实例化。我找不到让 GridLayoutGroup 工作的方法。我试过了,但没有运气
  • 什么?它很容易使用。请解释你是如何尝试使用它的,我会告诉你你做错了什么。您遇到什么问题以及您是如何尝试使用它的?

标签: c# unity3d 2d distribute evenly


【解决方案1】:

您应该使用GridLayoutGroup 以及具有LayoutElementPageObjectBase 组件的预制件。

您必须实例化预制件并使其成为具有 GridLayoutGroup 组件的 GameObject 的子对象。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2020-12-24
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多