Unity 6.3
0 онлайн 66 гостей 3 в системе
Вход

FilterAttribute

класс в UnityEditor.ShaderKeywordFilter

Описание

Сообщает системе шейдеров, какие ключевые слова шейдеров включать или удалять из сборки, на основе поля данных под ними.

Это базовый класс атрибута фильтра. Используйте вместо него производные атрибуты:

Эти атрибуты фильтра применяются к сборке только в том случае, если они присоединены к полю данных с серийным номером, которое является частью дерева типов RenderPipelineAsset, на которое ссылается QualitySettings. Эти атрибуты дают вам возможность управлять тем, какие ключевые слова shader использует Unity для сборки вариантов shader, на основе настроек конвейера отображения.

Например, по умолчанию следующий код shader генерирует четыре различных варианта shader во время сборки:

#pragma multi_compile __ SHADOWS_LOW SHADOWS_MEDIUM SHADOWS_HIGH

Если вы используете атрибуты фильтра, это можно настроить так, чтобы лучше соответствовать конфигурации проекта.

В следующем примере, когда forceLowShadows является true, атрибут фильтра SelectIf заставляет ключевое слово multi_compile содержать только вариант SHADOWS_LOW во время сборки.

using UnityEditor.ShaderKeywordFilter;

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

Вы также можете исключить ключевые слова из сборки. В следующем примере, когда enableHighShadows является false, атрибут фильтра RemoveIf удаляет SHADOWS_HIGH.

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

Вы также можете выбрать или удалить несколько ключевых слов одновременно. В следующем примере, когда onlyHighOrNoShadows является true, атрибут фильтра SelectIf выбирает только вариант SHADOWS_HIGH и вариант без теней.

Пустая строка "" обозначает пустое ключевое слово. Вы можете выбрать и удалить пустое ключевое слово только вместе с другим ключевым словом, поскольку "" само по себе применяется ко всем наборам ключевых слов multi_compile с пустым ключевым словом.

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

Вы можете использовать RemoveIfNot данными перечисления. В следующем примере удаляется SHADOWS_LOW вариант, если shadowMode устанавливается на что-либо, кроме Low.

public enum ShadowMode
{
    Low,
    Med,
    High
}

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

Вы можете использовать overridePriority аргумент, чтобы атрибутами фильтра переопределить ранее заданную фильтрацию. Обычно действует первое правило фильтра, встреченное в дереве типов для конкретного ключевого слова, а более поздние атрибуты Unity игнорирует. Если вы используете overridePriority, атрибуты могут заставить более позднее правило фильтра быть активным вместо этого.

Атрибуты ограничений можно добавить к атрибутам фильтра, чтобы определить, является ли правило фильтра активным в текущем контексте. См. GraphicsAPIConstraintAttribute и TagConstraintAttribute для больше информации.

Конструкторы

Конструктор Описание
FilterAttributeСообщает системе шейдеров, какие ключевые слова шейдеров включать в сборку или исключать из нее, на основе поля данных под ними.