在Unity中实例化

问题描述:

基本上我做了一个非常简单的游戏,其中有块掉落,我拥有基本的C#知识,但是我无法真正了解自己如何去做这件事。基本上我要在中间,左边和右边下降3个街区,你必须避免。我已经制作了一个实例化脚本,随机在1到4秒内在每个产卵位置产生它们,但有时它会意外产生3个!我只需要检查一下,看看是否已经在左边和右边产生了2个,然后在中间不产生一个,反之亦然。你们能帮我吗?谢谢!顺便说一句,这是我目前的spawn脚本。在Unity中实例化

 public GameObject spawn; 
    private float spawnTime; 

    void Start() 
    { 
     spawnTime = Random.Range(1, 5); 
     Invoke("Spawn", spawnTime); 
    } 

    void Spawn() 
    { 
     spawnTime = Random.Range(1, 5); 
     Instantiate(spawn, transform.position, Quaternion.identity); 
     Invoke("Spawn", spawnTime); 
    } 

编辑:

using UnityEngine; 

公共类randomSpawner:MonoBehaviour {

public GameObject spawn; 
private float spawnTime = 1; 


void Start() 
{ 
    if (GameObject.FindGameObjectsWithTag("Cube").Length < 2) 
    { 
     spawnTime = Random.Range(1, 3); 
     Invoke("Spawn", spawnTime); 

    } 
} 


void Spawn() 
{ 
    if (GameObject.FindGameObjectsWithTag("Cube").Length < 2) 
    { 
     spawnTime = Random.Range(1, 3); 
     Instantiate(spawn, transform.position, Quaternion.identity); 
     Invoke("Spawn", spawnTime); 

    } 
} 

}

+0

此脚本是否附加到正在生成的块? – CNuts

+0

@CN这不是,但现在我已经将它应用到每个正在产卵的立方体上,它们会在它们落下的时候将它们重叠在一起。 – enyap

+0

我要给正在衍生出来的立方体增加一个驱逐舰脚本,如果有超过2个的话可以摧毁它们,也许这样可以修复它,我会回发。 – enyap

你可以在你的模块添加一个标签,让我们说Block然后实例之前一个你做GameObject.FindGameObjectsWithTag("Block");这将返回一个然后你只需要验证该数组的长度。

void Spawn() 
{ 
    if(GameObject.FindGameObjectsWithTag("Block").Length < 2){ 
     Instantiate(spawn, transform.position, Quaternion.identity); 
    } 
    spawnTime = Random.Range(1, 5); 
    Invoke("Spawn", spawnTime); 
} 

你也可以有一个static变量,你产卵块和递减时,当你摧毁一个递增。

+0

哇,这是比我想象的更简单的方式,谢谢你的帮助! – enyap

+0

@enyap不客气,我可以帮助开心:) – CNuts

+0

其实我现在遇到一个错误,它说GameObject不包含长度的定义。编辑:我解决了它,这是一个简单的错误,我不熟悉统一API,并做了我生命中最简单的错误哈哈抱歉打扰,谢谢你的帮助! – enyap