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

Material.IsKeywordEnabled

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public bool IsKeywordEnabled(ref Rendering.LocalKeyword keyword);

声明

public bool IsKeywordEnabled(string keyword);

参数

keyword 要检查的 LocalKeyword
keyword 要检查的 LocalKeyword 的名称。

返回值

bool 如果此材质启用了具有给定名称的 LocalKeyword,则返回 true

描述

检查此材质是否启用了本地着色器关键字。

着色器关键字决定 Unity 使用哪些着色器变体。有关使用 本地着色器关键字全局着色器关键字 以及它们如何交互的信息,请参阅 使用 C# 脚本的着色器关键字

如果您传入一个 LocalKeyword,并且它不存在于此材质使用的着色器的 Shader.keywordSpace 中,则此函数返回 false。如果您传入一个字符串,并且 LocalKeyword 的名称不存在于此材质使用的着色器的 Shader.keywordSpace 中,则此函数返回 false

采用字符串作为参数的此函数版本比采用 LocalKeyword 的版本慢。如果您多次调用此函数,最佳实践是创建一个 LocalKeyword 结构体,将其缓存,然后使用它。

注意:LocalKeyword 特定于单个 ShaderComputeShader 实例。您不能将其与其他 ShaderComputeShader 实例一起使用,即使它们声明了具有相同名称的关键字。

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

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