我如何扩展FindObjectsByTag来过滤找到的对象的多个父对象?

问题描述 投票:-1回答:1
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的门

私有列表FindDoors(string []父母){GameObject [] doorsLeft = GameObject.FindGameObjectsWithTag(c_doorLeft); GameObject [] doorsRight = GameObject ....

c# unity3d
1个回答
0
投票

为什么您的方法行不通:您这样做的方式,您绕过所有可能的父母的门,并说如果您不将其删除,那么可以说是A或B,如果是B,它将被删除,因为它不是A。

© www.soinside.com 2019 - 2024. All rights reserved.