Unity3d Unity2D:实例化多个预置

Unity3d Unity2D:实例化多个预置,unity3d,Unity3d,我有一个带有多个精灵和一个附加脚本的复合预置。问题是,当我多次实例化它时,实例会变得疯狂: 它们在屏幕上的位置部分正常,部分由编辑器中预置的设置决定。但是Debug.Log显示transform.position变量对于所有实例都设置为相同的值。它是上次实例化使用的值 当GetComponent访问它们的脚本时,它们的行为异常。它无法正确访问某些成员。定义起来很复杂 下面是一个实例化预置的函数: private GameObject SpawnEntity(GameObject p, Vecto

我有一个带有多个精灵和一个附加脚本的复合预置。问题是,当我多次实例化它时,实例会变得疯狂:

它们在屏幕上的位置部分正常,部分由编辑器中预置的设置决定。但是Debug.Log显示transform.position变量对于所有实例都设置为相同的值。它是上次实例化使用的值

当GetComponent访问它们的脚本时,它们的行为异常。它无法正确访问某些成员。定义起来很复杂

下面是一个实例化预置的函数:

private GameObject SpawnEntity(GameObject p, Vector2 coords)
    {
        Instantiate(p);
        ...
        p.transform.position = coords;
        return p;
    }
这就是所谓的:

public GameObject humanoid;
...
SpawnEntity(humanoid, new Vector2(-1,-3));

Unity版本是2018.2.1f1。

问题在于您正在更改被引用游戏对象的位置,而不是实例化对象的位置。您需要创建对实例化对象的新引用,如下所示:

private GameObject SpawnEntity(GameObject p, Vector2 coords)
    {
        Gameobject myobj = Instantiate(p);
        ...
        myobj.transform.position = coords;
        return myobj;
    }

如果您在返回的对象上使用GetComponent,我想这也可以解决第2个问题,因为您之前返回的是原始预置,而不是实例化的对象。

它可以工作!谢谢你,我真不敢相信这是多么简单!我很愿意,但恐怕我没有足够的社区积分来支持这个选项。无论如何,我看不到它的按钮。