【问题标题】:unity instantiating multiple objects on the same position. I would like to spread them outunity 在同一位置实例化多个对象。我想把它们散开
【发布时间】:2021-07-19 01:58:40
【问题描述】:

我正在尝试分散实例化对象以填充网格布局中的灰色区域。到目前为止,我被困在我将所有对象堆叠在一起的这一点上。我确实尝试了一些东西,但它们会使对象不可见。这是我的代码和两张图片。场景之一和层次结构之一。 scene picturehierarchy 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");}
}

}

【问题讨论】:

    标签: unity3d user-interface instantiation


    【解决方案1】:

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

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

    当你分配一个父对象时,传递 true 来定位新对象 直接在世界空间。通过 false 设置对象的位置 相对于它的新父级..

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

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

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

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

    • 起始角第一个元素所在的角。

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

    • 子对齐方式如果布局元素没有填满所有可用空间,则用于布局元素的对齐方式。

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

    如果您正确填写所有这些字段,您的 UI 对象在生成并创建为具有此 grid layout componentPanel 对象时将不会彼此重叠,而是会形成一个网格。

    【讨论】:

    • 非常感谢 TEEBQNE 的详细解答。我已按照说明进行操作,现在可以按照我的意愿将组件置于网格布局中!
    • @kobecodes 太棒了!很高兴这可以帮助你。如果它解决了您的问题,您介意检查问题左侧的复选图标吗?它关闭了问题,并让其他人知道谁发现了这个问题,这个解决方案解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多