Unity : génération aléatoire d’obstacles

Mise en place du dossier Resources

Les obstacles seront instanciés à partir de préfabs. Prendre soin de créer un dossier nommé Resources dans le dossier des Assets. Y mettre les prefabs des obstacles à instancier.

Mise en place du spawner d’obstacles (ObstacleSpawner)

Créer sur la scène un EmptyObject et le nommer ObstacleSpawner.
Positionner ce Spawner à l’endroit d’où surgiront les obstacles.

Mise en place du script du spawner (ObstacleSpawnerController)

Créer un script de génération d’obstacles ObstacleSpawnerController

Version sans coroutine

public class ObstacleSpawnerController : MonoBehaviour
{
    Vector3 spawnPosition;
    public float spawnRate;

    // Start is called before the first frame update
    void Start()
    {
        spawnPosition = transform.position;
        StartSpawningObstacles();
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    void Spawn()
    {
        // Récupérer aléatoirement un obstacle depuis les ressources à partir de son nom
        var obstacle = Resources.Load("Obstacle" + Random.Range(minValue, maxValue));
        // Instanciation d'un obstacle
        Instantiate(obstacle, spawnPosition, Quaternion.identity) ;
    }

    void StartSpawningObstacles()
    {
        InvokeRepeating("Spawn", 1f, spawnRate);
    }

    void StopSpawningObstacles()
    {
        CancelInvoke("Spawn");
    }

}

Version avec coroutine

public class ObstacleSpawnerController : MonoBehaviour
{
    Vector3 spawnPosition;
    public float spawnRate;

    // Start is called before the first frame update
    void Start()
    {
        spawnPosition = transform.position;
        StartCoroutine("SpawnObstacles");
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    void Spawn()
    {
        // Récupérer aléatoirement un obstacle depuis les ressources à partir de son nom
        var obstacle = Resources.Load("Obstacle" + Random.Range(minValue, maxValue));
        // Instanciation d'un obstacle
        Instantiate(obstacle, spawnPosition, Quaternion.identity) ;
    }

    IEnumerator SpawnObstacles()
    {
        while(true)
        {
            Spawn();

            yield return new WaitForSeconds(spawnRate);
        }
    }
}

Ne pas oublier

– Assigner le script ObstacleSpawnerController à l’objet ObstacleSpawner
– Fournir une valeur au taux d’apparition