ShaderKeywordSet
структура в UnityEngine.Rendering
Выполнено в:UnityEngine.CoreModule
Описание
Коллекция ShaderKeyword, представляющая определенный вариант шейдера.
A ShaderKeywordSet представляет собой единый вариант шейдера, уникальное сочетание ключевых слов, которые включают или отключают функциональность внутри шейдера. Учтите, что эта структура содержит сведения не обо всех ключевых словах, доступных шейдеру: например, часть ключевых слов, связанных с платформой, хранится в PlatformKeywordSet.ShaderKeywordSet предназначен для доступа во время сборки через IPreprocessShaders или IPreprocessComputeShaders. Не создавайте экземпляр этой структуры и не используйте её отдельно. Применяйте эти обратные вызовы в скриптовый стриптинг сокращение времени сборки путем удаления неиспользуемых вариантов до их компиляции. Например, если вы знаете, что два разных ключевых слова никогда не потребуется включать одновременно, вы можете удалить любые варианты с включенными обоими ключевыми словами.
Дополнительные сведения о ключевых словах шейдера см. в разделе Изменение работы шейдеров с помощью ветвления и ключевых слов.
Дополнительные ресурсы: ShaderKeyword, Shader.EnableKeyword, Shader.EnableKeyword.
using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEngine.Rendering; using UnityEditor.Build; using UnityEditor.Rendering; class ShaderDebugBuildPreprocessor : IPreprocessShaders { ShaderKeyword m_KeywordToStrip; public ShaderDebugBuildPreprocessor() { m_KeywordToStrip = new ShaderKeyword("DEBUG"); } // Use callbackOrder to set when Unity calls this shader preprocessor. Unity starts with the preprocessor that has the lowest callbackOrder value. public int callbackOrder { get { return 0; } } public void OnProcessShader( Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> data) { for (int i = 0; i < data.Count; ++i) { if (data[i].shaderKeywordSet.IsEnabled(m_KeywordToStrip) && !EditorUserBuildSettings.development) { var foundKeywordSet = string.Join(" ", data[i].shaderKeywordSet.GetShaderKeywords()); Debug.Log("Found keyword DEBUG in variant " + i + " of shader " + shader); Debug.Log("Keyword set: " + foundKeywordSet); data.RemoveAt(i); --i; } } } }
Открытые методы
| Метод | Описание |
|---|---|
| Disable | Отключить определенное ключевое слово шейдера. |
| Enable | Включить определенное ключевое слово шейдера. |
| GetShaderKeywords | Возвращает массив со всеми включёнными ключевыми словами в ShaderKeywordSet. |
| IsEnabled | Проверьте, включено ли определенное ключевое слово шейдера. |