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

LocalKeyword.isOverridable

Declaration

public bool isOverridable;

Описание

Можно ли переопределить это ключевое слово локального шейдера ключевым словом глобального шейдера. (Только чтение).

Когда состояния локального ключевого слова шейдера и одноимённого глобального ключевого слова противоречат друг другу, Unity по этому значению определяет, включено ключевое слово или отключено.

  • Когда isOverridable является true: Если GlobalKeyword с тем же name существует и включена, Unity использует состояние из GlobalKeyword. В противном случае Unity использует состояние из LocalKeyword.
  • Когда isOverridable является false: Unity всегда использует состояние из LocalKeyword.

Чтобы установить значение isOverridable до true, объявьте ключевое слово shader с **global scope**. Чтобы установить значение isOverridable до false, объявляют ключевое слово shader с **локальной областью**. Дополнительные сведения об объявлении ключевых слов shader с локальной или глобальной областью см. Ключевые слова шейдера: объявление ключевых слов с локальной или глобальной областью действия.

Примечание: Если ключевое слово объявлено с локальной или глобальной областью в Shader если в исходном файле есть ключевое слово с таким же именем, как и в одной из его зависимостей, то область действия в исходном файле переопределяет область действия в зависимостях. Резервная команда, и пропуска, которые включены через 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); } } } }

Дополнительные ресурсы: Варианты шейдеров и ключевые слова, GlobalKeyword.