Сравните списки в C # / Unity и игнорируйте элементы - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Vuforia в Unity, в которой есть встроенный скрипт DefaultTrackableEventHandler.У него есть такой код:

protected virtual void OnTrackingFound()

{
    var rendererComponents = GetComponentsInChildren<Renderer>(true);

            foreach (var component in rendererComponents)
            component.enabled = true;
}

У меня есть некоторые элементы с тегом ignoreRend, которые я не хочу отображать, когда отслеживание находит целевое изображение.У меня есть такой список:

GameObject[] ignoreTheseObjects = GameObject.FindGameObjectsWithTag("ignoreRend");

Я пытался найти способ заставить цикл foreach игнорировать элементы в моем списке ignoreTheseObjects без какого-либо успеха.Похоже, что-то, что было бы легко кодировать, но я застрял ... Есть ли способ сравнить элементы в списках?Я пытался найти ответы, но не нашел ничего подходящего для этой проблемы.Я думаю что-то вроде:

            if (rendererComponents[i] == ignoreTheseObjects[i])

.. но не знаю, как написать это дальше.Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

В дополнение к ответу Лео Барткуса:

Предполагая, что элементы, которые вы хотите игнорировать, также являются частью вашей коллекции rendererComponents, вы можете просто сделать что-то вроде следующего:

Просто отметьтедля тега в цикле.

foreach (var component in rendererComponents)
{
        if (component.tag == "ignoreRend")
        {
           continue; //this will continue with next item in list
        }
        component.enabled = true;
}

Как и предполагал Лео, вы также можете использовать LINQ

. Чтобы использовать LINQ, вы должны импортировать его как

using System.LINQ

Затем вы можете использовать его следующим образом:

var filteredComponents = rendererComponents.Where(r => r.gameObject.tag != "ignoreRend")
foreach (var component in filteredComponents)
{
     component.enabled = true;
}

Для получения дополнительной информации о LINQ вы можете посетить начало работы с LINQ

0 голосов
/ 15 февраля 2019

Использование linq:

foreach (var component in rendererComponents.Where(r => r.gameObject.tag != "ignoreRend"))
...