#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. Смотрите мой первый комментарий.