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 component
的 Panel
对象时,现在将不会位于每个对象的顶部其他,但会形成一个网格。
我正在尝试展开实例化对象以填充网格布局中的灰色区域。到目前为止,我一直停留在将所有对象堆叠在一起的这一点上。我确实尝试了一些方法,但它们会使对象不可见。这是我的代码和两张图片。场景之一和层次结构之一。 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 component
的 Panel
对象时,现在将不会位于每个对象的顶部其他,但会形成一个网格。