Как я могу расширить FindObjectsByTag для фильтрации нескольких родителей найденных объектов? - PullRequest
0 голосов
/ 18 февраля 2020
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 (allDoors[i].transform.parent.name != parents[x])

Когда это Wall_Door_Long_01, поэтому если это Wall_Door_Long_01, оно не удалит элемент, но затем это Wall_Door_Long_02, так что теперь оно истинно и удалит даже если имя родителя Wall_Door_Long_01 и то же самое, если это Wall_Door_Long_02

И затем в конце он удалит все элементы. Но я хочу, чтобы он удалил только двери, родители которых не Wall_Door_Long_01 и не Wall_Door_Long_02

1 Ответ

0 голосов
/ 19 февраля 2020

Почему ваш путь не сработал: так, как вы это сделали, вы перебрали все двери, возможные родители, и сказали, что если не хотите, то удалите, ну, можно сказать, A или B, если бы это был B, его бы убрали. потому что это не A.

В соответствии с ранее Из вашего предыдущего вопроса : Как и раньше, вы можете сделать .Where(o => parents.Contains(o.transform.parent.name));, если родители есть в списке, это поздно, и это был тяжелый день Я не помню, позволяет ли linq делать то же самое с массивами (извините, но это мелочь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...