【发布时间】:2017-03-18 19:21:27
【问题描述】:
我正在尝试遍历游戏对象列表并找到第一个在层次结构中不活动的游戏对象并返回该游戏对象。
我遇到的问题是我的 foreach 语句在“敌人”上不断返回 null
下面这个语句中的“敌人”是问题所在
“pizzaEnemyList 中的 GameObject 敌人”
列表中确实有一个游戏对象。如下图所示
private List<GameObject> pizzaEnemyList = new List<GameObject> ();
private GameObject FetchPizzaEnemy()
{
GameObject pizzaEnemy = null;
int count = 0;
foreach (GameObject enemy in pizzaEnemyList)
{
if (enemy.activeInHierarchy == false)
{
pizzaEnemy = pizzaEnemyList [count];
pizzaEnemyList.Remove (enemy);
return pizzaEnemy;
}
count += 1;
}
return pizzaEnemy;
}
//我用来将敌人添加到列表中的函数。
public void DeactivateAndStoreEnemy(GameObject enemy)
{
//decativates the enemy
enemy.SetActive(false);
//Store the enemy into the correct list
if (enemy.name == "PizzaGuy")
{
pizzaEnemyList.Add (enemy);
}
else if (enemy.name == "FiresGuy")
{
friesEnemyList.Add (enemy);
}
else if (enemy.name == "SodaGuy")
{
sodaEnemyList.Add (enemy);
}
}
public int PizzaListUnactiveEnemyCount()
{
int unactiveEnemiesCount = 0;
foreach (GameObject enemies in pizzaEnemyList)
{
if (enemies.activeInHierarchy == false)
{
unactiveEnemiesCount += 1;
}
}
return unactiveEnemiesCount;
}
【问题讨论】:
-
你确定
activeInHierarchy确实是那个项目的假? (你确定它只是被禁用,而不是被销毁?)另外,你可以使用pizzaEnemy = enemy而不是pizzaEnemy = pizzaEnemyList [count],所以你不需要保留计数器变量。 -
您的问题有点不清楚:
FetchPizzaEnemy()是否返回null?还是FetchPizzaEnemy()在尝试访问enemy上的activeInHierarchy属性时抛出了NullReferenceException? -
你能证明你是在向
pizzaEnemyList添加项目吗?因为现在它是private,所以这意味着你没有从检查员统一添加它们。 -
@BrianSnow 当我将鼠标放在“foreach(pizzaEnemyList 中的 GameObject 敌人)”行中的“enemy”上时,它显示“null”
标签: c# unity3d foreach nullreferenceexception gameobject