Unity2D-transform.position不等于现实世界的位置

时间:2019-01-05 04:23:52

标签: unity3d position parent-child instantiation

好的,标题可能会令人困惑,因为我不知道怎么说。

我的情况:我有一个带有4个子对象的2d子画面,每个子画面围绕该子画面一个周边。所以看起来像这样:

enter image description here

Spawner2具有使用以下方法的脚本,该脚本在游戏开始时被调用。在脚本中,我实例化了一个新的预制件:

public void GenerateBox(int count)
{
    ...
    GameObject spawnedRoom = Instantiate(possibleRooms[chosen], transform.position, Quaterion.identity);
}

但这将实例化Spawner1位置上的对象。

所以我尝试调试。我从其父级中拉出Spawner2并查看了位置(X:1.0062,Y:-0.0038)。我把它放回2D精灵中,当我调试它的位置时,它给了我X:0,Y:1,Z:-9.8。

是因为我的预制件吗?有什么问题,我该如何解决?

2 个答案:

答案 0 :(得分:1)

请改用此重载方法:

Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

并将Spawner2父变换作为最后一个参数传递。现在,新对象应与Spawner2放在同一位置。最后,您的函数应如下所示:

public void GenerateBox(int count)
{
    ...
    GameObject spawnedRoom = Instantiate(possibleRooms[chosen], transform.position, Quaterion.identity, transform.parent);
}

答案 1 :(得分:1)

编辑:我开始了一个新项目,并做了完全相同的事情,除了现在,预制位置在所有轴上都设置为0。现在一切正常。我猜这是由于预制件的位置而发生的。例如,您在脚本中的世界位置(0,0,0)处实例化预制件,并且预制位置为(2,1,0),然后该预制件将在世界位置(2,1,0)生成。这是位置+预制位置