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

LocalKeyword.isOverridable

提出建议

提交成功!

感谢您帮助我们提升 Unity 文档的质量。虽然我们无法采纳所有提交,但我们确实会阅读我们用户提出的每一处更新,并在合适的情况下予以更新。

关闭

提交失败

由于某种原因,您提出的建议无法提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提升 Unity 文档的质量。

关闭

取消

public bool isOverridable;

描述

此本地着色器关键词是否可被全局着色器关键词覆盖。(只读)。

如果本地着色器关键词与同名全局着色器关键词的状态相互矛盾,Unity 将使用此值来确定关键词是否启用或禁用。

  • isOverridabletrue 时:如果存在同名且启用的 GlobalKeyword,Unity 将使用 GlobalKeyword 的状态。否则,Unity 将使用 LocalKeyword 的状态。
  • isOverridablefalse 时:Unity 将始终使用 LocalKeyword 的状态。

要将 isOverridable 的值设置为 true,请使用 **全局作用域**声明着色器关键词。要将 isOverridable 的值设置为 false,请使用 **局部作用域**声明着色器关键词。关于如何使用本地或全局作用域声明着色器关键词的信息,请参见 着色器关键词:使用本地或全局作用域声明关键词

注意:如果在一个 着色器源文件中使用本地或全局作用域声明了一个关键词,并在其一个依赖关系中声明了一个同名关键词,则源文件中的作用域将覆盖依赖关系中的作用域。依赖关系包括所有通过 回退命令包含的着色器,以及通过 UsePass 命令包含的 Pass。

此示例在一个材质的本地关键词空间中遍历本地着色器关键词。它确定它们是否被一个全局着色器关键词覆盖,并打印它们的状态。

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); } } } }