【发布时间】:2018-01-25 11:07:30
【问题描述】:
所以我构建了一个名为 Obstacles 的自定义类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class Obstacle{
public GameObject gameObj;
public Color color;
public GameObject[] particleEffects;
public static Vector3 SpawnLocation()
{
int positionQuadran = Random.Range(1, 3);
switch (positionQuadran)
{
//spawn above the player
case 1:
return new Vector3(Random.Range(1.5f, -1.5f),
Random.Range(4f - SpawnStars.closerToPlayer, 4.5f),
Random.Range(1, -3.2f));
//spawn benith the player
case 2:
return new Vector3(Random.Range(1.5f, -1.5f),
Random.Range(-0.5f, SpawnStars.closerToPlayer),
Random.Range(1f, -3.2f));
}
return Vector3.zero;
}
}
接下来我创建了一个包含 6 个对象的池,每两个对象具有相同的颜色,因此 obstaclePool 中有 3 种不同的颜色
问题是我试图找到不活动的Obstacle,它适用于第一个有颜色的对象,但是当我结束所有颜色并再次遍历循环时,它说Obstacle.gameObj 是在层次结构中处于活动状态,我不明白,每个 Obstacle.gameObj 都处于非活动状态(因为我在 start() 中将它们设置为处于非活动状态,所以每个障碍物都应该有一个处于非活动状态的 Obstacle.gameObj 但是在我激活第一个 Obstacle.gameObj 之后下一个似乎不存在,循环“发现”只有处于活动状态的gameObj,并假设列表中的每个对象现在都是活动的,实际上只有前 3 个处于活动状态,其余 3 个不活动......而且我不明白为什么...为什么代码没有发现剩余的gameObj 处于非活动状态?
foreach (Obstacle star in obstaclePool)
{
if (!star.gameObj.activeInHierarchy)
{
Color color = star.color;
color.a = 0.5f;
panel.GetComponent<Renderer>().material.color = color;
return star;
}
}
【问题讨论】:
-
您在哪里/何时使用 foreach?
-
在 Start() 中{}