Описание
Объявлено ли это ключевое слово шейдера с глобальной областью действия. (Только чтение).
Когда глобальное и локальное состояние ключевого слова шейдера противоречат друг другу, Unity использует это значение, чтобы определить, включено или отключено ключевое слово.
- Когда
isOverridable
имеет значениеtrue
: если GlobalKeyword с такое жеname
существует и включено, Unity использует состояниеGlobalKeyword
. В противном случае Unity использует состояниеLocalKeyword
. - Когда
isOverridable
имеет значениеfalse
: Unity всегда использует состояниеLocalKeyword
.
Чтобы установить для isOverridable
значение true
, объявите ключевое слово шейдера с **глобальной областью действия**. Чтобы установить для isOverridable
значение false
, объявите ключевое слово шейдера с **локальной областью действия**. Информацию об объявлении ключевых слов шейдера с локальной или глобальной областью действия см. в разделе Ключевые слова шейдера: объявление ключевых слов с локальной или глобальной областью действия.
Примечание. Если ключевое слово объявлено с локальной или глобальной областью действия в исходном файле Shader, а ключевое слово с тем же именем объявлено в одна из его зависимостей, область в исходном файле переопределяет область в зависимостях. Зависимости включают все шейдеры, которые включаются с помощью команды Fallback, и проходы, которые включаются с помощью команда UsePass.
В этом примере перебираются локальные ключевые слова шейдера в локальном пространстве ключевых слов для материала. Он определяет, переопределены ли они глобальным ключевым словом шейдера, и выводит их состояние.
using UnityEngine;
using UnityEngine.Rendering;
public class KeywordExample : MonoBehaviour
{
public Material material;
void Start()
{
CheckShaderKeywordState();
}
void CheckShaderKeywordState()
{
// Get the instance of the Shader class that the material uses
var shader = material.shader;
// Get all the local keywords that affect the Shader
var keywordSpace = shader.keywordSpace;
// Iterate over the local keywords
foreach (var localKeyword in keywordSpace.keywords)
{
// If the local keyword is overridable,
// and a global keyword with the same name exists and is enabled,
// then Unity uses the global keyword state
if (localKeyword.isOverridable && Shader.IsKeywordEnabled(localKeyword.name))
{
Debug.Log("Local keyword with name of " + localKeyword.name + " is overridden by a global keyword, and is enabled");
}
// Otherwise, Unity uses the local keyword state
else
{
var state = material.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state);
}
}
}
}
Смотрите так же: Shader variants and keywords, GlobalKeyword.