嘿大家,谢谢你抽出时间。
我目前正在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'作为预制件(将其拖入“资产”中,如美丽的答案中所述)所以我引用了一个即将被删除的“事物”实例。把它拖到地狱(资产)并且从此过得很开心。
答案 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
脚本放在球预制件上完成。