Используйте List
в качестве поля для отслеживания ракет:
private List<GameObject> rockets;
В начале Start()
создайте экземпляр списка:
rockets = new List<GameObject>();
В вашей сопрограмме очистите список с помощью Clear
, затем используйте Add
, чтобы добавить ракеты в ваш список. После того, как вы закончите добавление, используйте WaitWhile
для цикла, пока не останется ракет. Мы напишем метод с именем AnyRocketsLeft
, который возвращает true, если есть еще те, которые еще не уничтожены.
После WaitWhile
используйте WaitForSeconds
, чтобы подождать секунду, чтобы определить время между партиями.
for (int i = 1; i < 6; i++)
{
rockets.Clear();
GameObject rocketspawnblue = Instantiate(
rocketblue,
new Vector3(Random.Range(-15, 15), (Random.Range(-15, 15))),
Quaternion.identity);
SpriteRenderer rocketscolor1 = rocketspawnblue.GetComponent<SpriteRenderer>();
//rocketscolor.color = colors[Random.Range(0,colors.Length)];
rocketscolor1.color = Color.blue;
rockets.Add(rocketspawnblue);
GameObject rocketspawnred = Instantiate(
rocketred,
new Vector3(Random.Range(-15, 15), (Random.Range(-15, 15))),
Quaternion.identity);
SpriteRenderer rocketscolor2 = rocketspawnred.GetComponent<SpriteRenderer>();
//rocketscolor.color = colors[Random.Range(0, colors.Length)];
rocketscolor2.color = Color.red;
rockets.Add(rocketspawnred);
yield return new WaitWhile(() => AnyRocketsLeft());
yield return new WaitForSeconds(1);
}
// ran out of rockets
// set up the "next level" prompt, etc. here
Чтобы проверить, не уничтожены ли еще какие-либо ракеты, мы можем проверить их свойство activeInHierarchy
. Просто переберите список ракет и верните true, если вы найдете, и false в противном случае.
private bool AnyRocketsLeft() {
foreach (int i = 0 ; i < rockets.count ; i++) {
if (rockets[i].activeInHierarchy) return true;
}
return false;
}
Если вы используете Linq, вы можете использовать List.Any ():
private bool AnyRocketsLeft() {
return rockets.Any(o => o.activeInHierarchy);
}