![](/img/trans.png)
[英]How can i add a BehaviourScript to an Instantiated GameObject in Unity3D?
[英]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 thing
的public GameObject thing
Spawner
Ball
脚本放到预制Ball
上 做完了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.