unity 在同一位置实例化多个对象。我想把它们分散开来

unity instantiating multiple objects on the same position. I would like to spread them out

我正在尝试展开实例化对象以填充网格布局中的灰色区域。到目前为止,我一直停留在将所有对象堆叠在一起的这一点上。我确实尝试了一些方法,但它们会使对象不可见。这是我的代码和两张图片。场景之一和层次结构之一。 scene picture hierarchy picture

public class stockSpawner : MonoBehaviour
{
    [SerializeField] GameObject stockPrefab;
    int x;
void Start()
{
    x = Mathf.RoundToInt(scene2Calc.nS);
}


void Update()
{
    if (x >= 1)
    {
        Instantiate(stockPrefab, transform);
        x--;
    }
    else { Debug.Log(x + "this is x value");}
}

}

看来你所有的资产都是UI。如果你想创建一个网格,通常我会说实例化对象并更改它们在双循环中生成的变换。在一个循环中,您将迭代产卵的水平轴,而另一个循环移动垂直轴。但是,由于您的设置全部 UI,您可以使用一些漂亮的组件为您完成所有繁重的工作。

grid layout group 附加到要生成所有这些 UI 对象的父对象。我建议将此组件附加到屏幕截图中的 Panel。我还建议您在使用 UI 对象时稍微更改安装代码。为确保锚定、缩放等工作正常,您需要使用 Instantiate(stockPrefab, transform, false);。最后一个参数是 instantiateInWorldSpace,来自文档,

When you assign a parent Object, pass true to position the new object directly in world space. Pass false to set the Object’s position relative to its new parent..

现在回到问题的主要部分。如果您将网格布局组件添加到面板,对象现在将对齐到网格中。您可以更改此组件上的各种不同字段。它们在文档中,但为了清楚起见,我也会在此处列出它们。

  • Padding 布局组边缘内的内边距。

  • 单元格大小组中每个布局元素使用的大小。

  • 间距布局元素之间的间距。

  • Start Corner第一个元素所在的角

  • 起始轴 沿哪个主轴放置元素。在开始新行之前,水平将填充整行。垂直将在新列开始之前填充整个列。

  • 子对齐 如果布局元素未填满所有可用元素,则用于布局元素的对齐 space.

  • 约束 将网格约束为固定的行数或列数以辅助自动布局系统。

如果您正确填写了所有这些字段,您的 UI 对象在生成并子级到具有此 grid layout componentPanel 对象时,现在将不会位于每个对象的顶部其他,但会形成一个网格。