Изменение Random.Диапазон, чтобы выбрать врага 1, затем врага 2 после задержки?

#c#

#c#

Вопрос:

Используя приведенный ниже код, как бы я закодировал его так, чтобы вместо случайного появления врага из массива он порождал enemy1, затем enemy 2, скажем, после 10-секундной задержки, но все равно использовал случайные задержки появления и время смерти?

Может быть просто, но я просто не вижу этого..

 using UnityEngine;
using System.Collections;

public class Spawner : MonoBehaviour
{
    public GameObject[] enemies;

    private void Start()
    {
        StartCoroutine("SpawnHandler");
    }

    private IEnumerator SpawnHandler()
    {
        float spawnDelay;
        int thisEnemy = 0;
        GameObject cachedEnemy;
        float dieTime;

        while (thisEnemy < 2)
        {
            spawnDelay = Random.Range(3f,6f); //random time, from 1-3
            dieTime = Random.Range(3f,3f);
            yield return new WaitForSeconds(spawnDelay); //wait that time
            cachedEnemy = (GameObject)Instantiate(enemies[thisEnemy],
                  transform.position, transform.rotation);//spawn enemy, cache him
            StartCoroutine(Kill(dieTime, cachedEnemy));
        }
    }

    private IEnumerator Kill(float wait, GameObject enemy)
    {
        yield return new WaitForSeconds(wait);
        Destroy(enemy);
    }
}
  

чтобы повторить, что мне нужно выполнить: -> задержка появления случайных объектов -> порождает врага 1 -> задержка (скажем, 10 секунд) -> порождает врага 2 -> цикл;

Надеюсь, это понятно, и любая помощь приветствуется, заранее спасибо.

Ответ №1:

Просто измените условие вашего while цикла:

 private IEnumerator SpawnHandler(){
    float spawnDelay;
    int thisEnemy = 0;
    GameObject cachedEnemy;
    float dieTime;

    while (thisEnemy < 2)
    {
        spawnDelay = Random.Range(3f,6f); //random time, from 1-3
        dieTime = Random.Range(3f,3f);

        yield return new WaitForSeconds(spawnDelay); //wait that time

        cachedEnemy = (GameObject)Instantiate(enemies[thisEnemy],       transform.position, transform.rotation);//spawn enemy, cache him

        StartCoroutine(Kill(dieTime, cachedEnemy));
        thisEnemy  ;
    }
}
  

Комментарии:

1. Если вам нужно сохранить условие while цикла как true , просто сделайте thisEnemy = thisEnemy == 0 ? 1 : 0;

2. То, что вы сделали, было точным ответом на вопрос, который я не могу обвинить вас в этом. Однако предполагалось, что цикл не умрет; поэтому они постоянно появляются после случайных раз. Также enemyTwo должен умереть через 1 секунду, а не в то же время, что и враг один из 3f. Вот где мне стало сложно, еще раз спасибо за ответ, я был неправ со своей стороны, я включил весь код в вопросы и дважды проверил формулировку. Это сложно!

3. Смотрите мой первый комментарий.