版本:Unity 6 (6000.0)
语言English
  • C#

FilterAttribute

UnityEditor.ShaderKeywordFilter 中的类

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

根据下面的数据字段,告诉着色器系统要包含或排除构建中的哪些着色器关键字。

这是基本过滤器属性类。请改用派生属性

只有当这些过滤器属性附加到类型树中属于 RenderPipelineAsset(由 QualitySettings 引用)的一部分的序列化数据字段时,它们才会应用于构建。这些属性使您可以根据渲染管线设置控制 Unity 用于构建着色器变体的着色器关键字。

例如,默认情况下,以下着色器代码在构建期间生成四种不同的着色器变体

#pragma multi_compile __ SHADOWS_LOW SHADOWS_MEDIUM SHADOWS_HIGH

如果您使用过滤器属性,则可以对其进行调整以更好地适应项目的设置配置。

在以下示例中,当 forceLowShadowstrue 时,SelectIf 过滤器属性强制将 multi_compile 关键字设置为仅在构建期间包含 SHADOWS_LOW 变体。

using UnityEditor.ShaderKeywordFilter;

[SelectIf(true, keywordNames: "SHADOWS_LOW")] bool forceLowShadows;

您还可以从构建中排除关键字。在以下示例中,当 enableHighShadowsfalse 时,RemoveIf 过滤器属性会移除 SHADOWS_HIGH

[RemoveIf(false, keywordNames: "SHADOWS_HIGH")]
bool enableHighShadows;

您还可以一次选择或移除多个关键字。在以下示例中,当 onlyHighOrNoShadowstrue 时,SelectIf 过滤器属性仅选择 SHADOWS_HIGH 变体和一个无阴影变体。

空字符串 "" 表示空关键字。您只能与另一个关键字一起选择和移除空关键字,因为单独的 "" 应用于所有具有空关键字的 multi_compile 关键字集。

[SelectIf(true, keywordNames: new string[] {"", "SHADOWS_HIGH"})]
bool onlyHighOrNoShadows;

您可以将 RemoveIfNot 与枚举数据一起使用。以下示例在 shadowMode 设置为除 Low 之外的任何值时,移除 SHADOWS_LOW 变体。

public enum ShadowMode
{
    Low,
    Med,
    High
}

[RemoveIfNot(ShadowMode.Low, keywordNames: "SHADOWS_LOW")] ShadowMode shadowMode;

您可以使用 overridePriority 参数使用过滤器属性覆盖您之前设置的过滤。通常,类型树中遇到的第一个针对特定关键字的过滤器规则会生效,Unity 会忽略任何后续属性。如果您使用 overridePriority,则属性可以强制后续过滤器规则生效。

您可以向过滤器属性添加约束属性,以确定过滤器规则在当前上下文中是否处于活动状态。有关更多信息,请参阅 GraphicsAPIConstraintAttributeTagConstraintAttribute

构造函数

FilterAttribute根据下面的数据字段,告诉着色器系统要包含或排除构建中的哪些着色器关键字。