繁体   English   中英

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

[英]Unity3D - Instantiated gameobject loses method?

大家好,感谢您抽出宝贵的时间。

我目前正在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自顶向下射击程序或类似示例中找不到正确的解决方案。

再次感谢。

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

€:我的错误不是将“事物”用作预制件(如精美答案中所述,将其拖入“资产”),因此我指的是即将被删除的“事物”实例。 把它拖到地狱(资产),从此以后很幸福。

我用这些脚本重新创建了安装程序,得到的是这些对象只是没有被破坏,而是新生成的对象正确移动到了14岁。

它们没有被销毁的原因是,您叫Destroy(this); 这会破坏脚本组件,而不是游戏对象。 所以这应该是Destroy(gameObject); 代替。 通过此修复程序,它对我来说运行得很好。

另外,如果没有特殊的理由使用对象,则使用您的public Object thing; 最好是public GameObject thing;

编辑:

我如何设置:

  • 创建了一个Empty (将其重命名为Spawner
  • 创建了一个Sphere (作为我thing名字,将其重命名为Ball
  • Ball拖到素材资源文件夹中,使其成为预制件
  • 从现场删除球
  • 创建了Spawner脚本,并将生成的代码放入其中
  • 创建了一个Ball脚本并将您的移动代码放入其中
  • 对脚本进行了两项更改
  • Spawner脚本的游戏对象产卵
  • Ball预制件拖入public GameObject thingpublic GameObject thing Spawner
  • Ball脚本放到预制Ball

做完了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM