private List<GameObject> FindDoors(string[] parents)
{
GameObject[] doorsLeft = GameObject.FindGameObjectsWithTag(c_doorLeft);
GameObject[] doorsRight = GameObject.FindGameObjectsWithTag(c_doorRight);
List<GameObject> allDoors = doorsLeft.Union(doorsRight).ToList();
List<GameObject> toRemove = new List<GameObject>();
for (int i = 0; i < allDoors.Count; i++)
{
for (int x = 0; x < parents.Length; x++)
{
if (allDoors[i].transform.parent.name != parents[x])
{
toRemove.Add(allDoors[i]);
}
}
}
foreach (var it in toRemove)
{
allDoors.Remove(it);
}
foreach (GameObject door in allDoors)
{
Debug.Log("Door Parent : " + door.transform.parent);
}
return allDoors;
}
用法:
var allDoors = FindDoors(new string[]{ "Wall_Door_Long_01", "Wall_Door_Long_02" });
但是在功能FindDoors中,返回allDoors为空。我认为问题出在这个IF:
if (allDoors[i].transform.parent.name != parents[x])
[它是Wall_Door_Long_01,因此如果它是Wall_Door_Long_01,它将不会删除该项目,但接下来是Wall_Door_Long_02,所以现在它是true,即使父名是Wall_Door_Long_01,也将删除它,即使它的名字是Wall_Door_Long_02,也将删除它)
然后最后它将删除所有项目。但我希望它仅删除其父母不是Wall_Door_Long_01而不是Wall_Door_Long_02的门
私有列表
为什么您的方法行不通:您这样做的方式,您绕过所有可能的父母的门,并说如果您不将其删除,那么可以说是A或B,如果是B,它将被删除,因为它不是A。