public IEnumerator SpawnWave()
    {
        monoBehaviour = GameObject.Find("MonoBehaviourObject").GetComponent <MonoBehaviourObject>();

        gameControllerLevel2 = GameObject.FindGameObjectWithTag("GameControllerLevel2").GetComponent <GameControllerLevel2>(); //script da controladora do jogo

        gameControllerLevel2.pauseWaves = true;                                                                                //pausa a aparição dos outros inimigos

        int objectCount = levelObjects.Length;


        for (int count = 0; count < objectCount; count++)
        {
            monoBehaviour.StartCoroutine(levelObjects[count].Spawn());

            while (!levelObjects[count].terminou)
            {
                yield return(null);                //continua execução do loop no próximo frame
            }
        }

        gameControllerLevel2.pauseWaves = false; //retorna a aparição dos outros inimigos

        yield return(null);
    }
        private MonoBehaviourObject GetCharacteristicAsset(Characteristic characteristic)
        {
            string name = "StandardBeatmapCharacteristic";

            switch (characteristic)
            {
            case Characteristic.OneSaber:
                name = "OneColorBeatmapCharacteristic";
                break;

            case Characteristic.NoArrows:
                name = "NoArrowsBeatmapCharacteristic";
                break;

            case Characteristic.Standard:
                name = "StandardBeatmapCharacteristic";
                break;
            }
            MonoBehaviourObject charObj = null;

            if (!_characteristicCache.ContainsKey(name))
            {
                charObj = _assetsFile.Manager.MassFirstAsset <MonoBehaviourObject>(x => x.Object.Name == name).Object;
                _characteristicCache.Add(name, charObj);
            }
            else
            {
                charObj = _characteristicCache[name];
            }
            return(charObj);
        }
    public IEnumerator Spawn()
    {
        monoBehaviour = GameObject.Find("MonoBehaviourObject").GetComponent <MonoBehaviourObject>();

        yield return(new WaitForSeconds(startWait));                                                                       //espera X segundos para começar

        Vector3    spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z); //posição X aleatória
        Quaternion spawnRotation = Quaternion.identity;                                                                    //sem rotação

        //enquanto houverem inimigos para instanciar
        for (int count = 0; count < qtd; count++)
        {
            GameObject.Instantiate(spawnObject, spawnPosition, spawnRotation);             //instancia o asteróide

            if (count + 1 < qtd)
            {
                yield return(new WaitForSeconds(spawnWait));                //espera X segundos
            }
        }

        yield return(new WaitForSeconds(endWait)); //espera X segundos

        terminou = true;                           //indica que a onda de inimigos parou de ser instanciada
    }