我只是不知道如何编写if部分。剩下的只是实例化位置和四元数之类的东西……可能。
我想知道GameObject rocketspawnblue和GameObject rocketspawnred是否消失了,所以我可以生成下一对,直到生成循环中的所有对。
这是我在 Scanner userInput = new Scanner(System.in);
int [][] matrix = new int[2][2];
for (int x = 0 ; x < 2 ; x++){
for(int y = 0 ; y < 2 ; y++){
System.out.printf("enter a number for row %d column %d : ",(x+1),(y+1));
matrix[x][y] = userInput.nextInt();
}
}
for(int t : matrix){
System.out.print(t + " ");
}
userInput.close();
}
中放入的产卵协程。但是那可能行不通,因为在我拿走所有火箭之前都需要检查每一帧。...
Start()
答案 0 :(得分:2)
使用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);
}