Unity3d Unity:实例化预置出现在错误的位置

Unity3d Unity:实例化预置出现在错误的位置,unity3d,instantiation,Unity3d,Instantiation,我正在创建一个简单的基于文本的谜题,在运行时会有不同数量的线索。我想我应该通过实例化一些预置来实现这一点。这是它现在的样子 请注意变换值。资产中的预置具有完全相同的值 为了测试是否可以在运行时实例化一组拼图对象,我创建了以下简单循环: for (int x = 1; x < 6; x++) { Debug.Log(15-x); Instantiate(puzzle, new Vector2(0, 15 - x), Quaternio

我正在创建一个简单的基于文本的谜题,在运行时会有不同数量的线索。我想我应该通过实例化一些预置来实现这一点。这是它现在的样子

请注意变换值。资产中的预置具有完全相同的值

为了测试是否可以在运行时实例化一组拼图对象,我创建了以下简单循环:

     for (int x = 1; x < 6; x++)
     {
         Debug.Log(15-x);
         Instantiate(puzzle, new Vector2(0, 15 - x), Quaternion.identity, GameObject.FindGameObjectWithTag("Canvas").transform);
     }
for(int x=1;x<6;x++)
{
Debug.Log(15-x);
实例化(拼图,新矢量2(0,15-x),四元数.identity,GameObject.FindGameObjectWithTag(“画布”).transform);
}
想法是所有的克隆体都会堆在第一个拼图对象下面。但是,当我运行它时会发生以下情况:


克隆被堆放在错误的位置。我使用调试日志来确认向量使用了正确的值,我也尝试使用Vector3。在unity论坛上有很多类似的问题,但这些解决方案都不适合我。任何洞察都将不胜感激。

要设置画布元素的位置,您需要使用的

因此,您需要获取目标元素的anchoredPosition,以便可以定位下一个元素

public解谜;
公共游戏对象难题;
私有void实例化epuzzle()
{
对于(int x=1;x<6;x++)
{
RectTransform spawnedPuzzle=实例化(puzzle,GameObject.FindGameObjectWithTag(“Canvas”).transform).GetComponent();
spawnedPuzzle.anchoredPosition=新矢量2(firstPuzzle.anchoredPosition.x,firstPuzzle.anchoredPosition.y-(50*x));//50是您想要的间距。
}
}
指定当前位于inspector中的第一个元素(拼图)的参考,它将开始将下一个元素定位在该元素下方,间距为50

这是输出。

您肯定应该使用具有垂直布局组的父元素,并将新元素生成为它的子元素。它会做你想做的事的就像一个符咒,谢谢!我还必须用“RectTransform”替换拼图对象“Transform”