une solution alternative serait de lancer une deuxième coroutine qui elle s'oocupe de modifier Spawnwait.
donc la premiere comme celle que tu as qui instancie les ennemis, et lautre qui au bout de tant de temps reduit le temps a attendre avant l'appartition du nouvel ennemi.
ça donnerait quelque chose comme :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spawner : MonoBehaviour
{
public GameObject enemies;
public Vector3 spawnValues;
private float spawnWait;
public float startWait;
public bool stop;
public bool sop;
private void Start()
{
// déclare le SpawnWait avant de lancer les coroutine, c'est toujours mieux ;)
spawnWait = 1.5f;
StartCoroutine(waitSpawner());
//coroutine qui va s'occuper de diminuer le SpawnWait
StartCoroutine(WaitDown());
}
IEnumerator waitSpawner()
{
yield return new WaitForSeconds(startWait);
while (!stop)
{
Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x),
Random.Range(-spawnValues.y, spawnValues.y), 0);
Instantiate(enemies, spawnPosition + transform.TransformPoint(0, 0, 0), gameObject.transform.rotation);
yield return new WaitForSeconds(spawnWait);
}
}
// coroutine pour diminuer le temps d'attente
IEnumerator WaitDown()
{
yield return new WaitForSeconds(15f);
spawnWait = 0.5f;
}
}
Apres tu as aussi la possibilité de diminuer progressivement SpawnWait, par exemple en le divisant par deux toute les 15 secondes (passera de 1.5à 0.75 à 0.375.. etc)
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spawner : MonoBehaviour
{
public GameObject enemies;
public Vector3 spawnValues;
private float spawnWait;
public float startWait;
public bool stop;
public bool sop;
private void Start()
{
// déclare le SpawnWait avant de lancer les coroutine, c'est toujours mieux ;)
spawnWait = 1.5f;
StartCoroutine(waitSpawner());
//coroutine qui va s'occuper de diminuer le SpawnWait
StartCoroutine(WaitDown());
}
IEnumerator waitSpawner()
{
yield return new WaitForSeconds(startWait);
while (!stop)
{
Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x),
Random.Range(-spawnValues.y, spawnValues.y), 0);
Instantiate(enemies, spawnPosition + transform.TransformPoint(0, 0, 0), gameObject.transform.rotation);
yield return new WaitForSeconds(spawnWait);
}
}
// coroutine pour diminuer le temps d'attente
IEnumerator WaitDown()
{
yield return new WaitForSeconds(15f);
// tant que stop == false on diminue toute les 15 secondes en divisant par deux
if(!stop)
{
spawnWait *= 0.5f;
yield return new WaitForSeconds(15f);
}
}
}