Я использую 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])
.. но не уверен, как написать это дальше. Любая помощь будет оценена по достоинству!
Да, так как этот скрипт используется каждый раз, когда найдено целевое изображение.





Использование линка:
foreach (var component in rendererComponents.Where(r => r.gameObject.tag != "ignoreRend"))
Я получаю сообщение об ошибке: "'Renderer[]' не содержит определения для 'where', и не найден доступный метод расширения 'where', принимающий первый аргумент типа 'Renderer[]'".
Есть опечатка. Где должно начинаться с заглавной буквы W
В дополнение к ответу Лео Барткуса:
Предполагая, что элементы, которые вы хотите игнорировать, также являются частью вашей коллекции 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
Большое спасибо, первый пример сработал отлично!
Итак, компоненты, которые вы хотите игнорировать (не включать), также являются частью коллекции rendererComponents?