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

时间:2019-08-22 03:30:31

标签: unity3d instantiation

我正在创建一个简单的基于文本的难题,它将在运行时确定各种线索。我认为我应该通过实例化多个预制件来做到这一点。这就是现在的样子。

image 1

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

为了测试我是否可以在运行时实例化一堆Puzzle对象,我创建了一个简单的循环:

     for (int x = 1; x < 6; x++)
     {
         Debug.Log(15-x);
         Instantiate(puzzle, new Vector2(0, 15 - x), Quaternion.identity, GameObject.FindGameObjectWithTag("Canvas").transform);
     }

所有克隆的想法都将堆积在第一个Puzzle对象的下面。但是,这是我运行它时发生的情况:

image 2

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

1 个答案:

答案 0 :(得分:2)

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

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

    public RectTransform firstPuzzle;
    public GameObject puzzle;

    private void InstantiatePuzzle()
    {
        for (int x = 1; x < 6; x++)
        {
            RectTransform spawnedPuzzle = Instantiate(puzzle, GameObject.FindGameObjectWithTag("Canvas").transform).GetComponent<RectTransform>();
            spawnedPuzzle.anchoredPosition = new Vector2(firstPuzzle.anchoredPosition.x, firstPuzzle.anchoredPosition.y - (50 * x));// 50 is the gap you want it to be.
        }
    }

分配当前在检查器中的第一个元素(拼图)的参考,它将开始将下一个元素定位在其下方,且间距为50。

这是输出。 output