比较c# / unity中的列表并忽略项目



我正在使用Unity中的Vuforia,它具有一个内置的脚本,称为DefaultTrackableEventHandler。它具有这样的代码;

protected virtual void OnTrackingFound()
{
    var rendererComponents = GetComponentsInChildren<Renderer>(true);
            foreach (var component in rendererComponents)
            component.enabled = true;
}

我有一些带有标签" ignorend"的项目,当跟踪找到目标图像时,我不想渲染这些标签。我有这样的列表:

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

我一直在试图找到一种方法来使foreach循环忽略我的无知对象列表中的项目,而没有任何成功。感觉像是很容易编码的东西,但是我被卡住了...是否有任何方法可以比较列表中的项目?我尝试搜索答案,但还没有找到适合此问题的东西。我在想;

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

..但不确定如何进一步写。任何帮助将不胜感激!

使用linq:

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

除了leo bartkus答案:

假设您要忽略的项目也是渲染点集合的一部分,您可以做以下操作:

只需检查循环中的标签即可。

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

正如Leo所建议的那样,您也可以使用Linq

要使用Linq,您必须通过

导入它
using System.LINQ

然后您可以使用它:

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

有关LINQ U的更多信息,您可能希望访问Linq

相关内容

  • 没有找到相关文章

最新更新