Unity3D - 实例化的gameobject丢失方法?

时间:2016-03-27 20:13:51

标签: c# unity3d 2d instantiation gameobject

嘿大家,谢谢你抽出时间。

我目前正在Unity中处理2D内容并遇到以下问题:

我们有一个定期创建“东西”的产卵者:

public float spawnTime = 3;
public Object thing; //public GameObject thing;

// Use this for initialization
void Start () {
    InvokeRepeating("spawn", spawnTime, spawnTime);
}

void spawn ()
{
    Vector3 pos = new Vector3(-14, 0, 0);
    Quaternion ori = new Quaternion(0, 0, 0, 0);
    Instantiate(thing, pos, ori);

}

它做得很好。遇见'事':

void Start () {
    InvokeRepeating("move", 0.1f, 0.1f);
}

void move()
{
    transform.Translate(0.2f, 0, 0);
    if (this.transform.position.x > 14)
    {
        Destroy(this); //Destroy(GameObject);

所以基本上创造了一个'东西',从-14到14然后窒息。

问题:一旦第一个'东西'被删除,新创建的(不是已经移动的东西)就不会从-14移动。

我想我没有正确指定定期调用哪种方法,但无法在unity3d自上而下的射手或类似示例中找到合适的解决方案。

再次感谢。

€:应用建议的更改后,spawner会在创建3个周期后停止创建“事物”。

€:我的错误是没有使用'thing'作为预制件(将其拖入“资产”中,如美丽的答案中所述)所以我引用了一个即将被删除的“事物”实例。把它拖到地狱(资产)并且从此过得很开心。

1 个答案:

答案 0 :(得分:1)

我用这些脚本重新创建了你的设置,我得到的是对象没有被破坏,但新产生的移动正常直到14。

他们没有被破坏的原因是,你叫Destroy(this);破坏了脚本组件,而不是游戏对象。所以这应该是Destroy(gameObject);。有了这个修复程序,它对我运行就好了。

此外,如果没有特殊原因可以使用对象,那么public Object thing;最好是public GameObject thing;

编辑:

我如何设置:

  • 创建了Empty(将其重命名为Spawner
  • 创建了Sphere(作为我的thing,将其重命名为Ball
  • Ball预制件拖入资产文件夹
  • 从场景中删除了球
  • 创建了一个Spawner脚本并将您的产卵代码放入其中
  • 创建了一个Ball脚本并将您的移动代码放入其中
  • 对脚本进行了两处更改
  • Spawner脚本放在spawner gameobject
  • Ball预制件拖入public GameObject thing Spawner
  • Ball脚本放在球预制件上

完成。