# IsKeywordEnabled

> Checks whether a local shader keyword is enabled for this ray tracing shader.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.Rendering](/engine/6000.3/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule

## IsKeywordEnabled(string)

Checks whether a local shader keyword is enabled for this ray tracing shader.

```csharp
public bool IsKeywordEnabled(string keyword)
```

### Parameters

**** (\[string]\(https\://learn.microsoft.com/dotnet/api/system.string)): The local keyword to check.

### Returns

| Type                                                          | Description                                                                                                                                                                       |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | Returns true if the given [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) is enabled for this ray tracing shader. Otherwise, returns false. |

### Remarks

Shader keywords determine which shader variants Unity uses. For information on working with [local shader keywords](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) and [global shader keywords](/engine/6000.3/script-reference/unityengine/rendering/globalkeyword.md) and how they interact, see [Using shader keywords with C# scripts](/engine/6000.3/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/shader-keywords-scripts.md).

If you pass in a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) and it does not exist in the [RayTracingShader.keywordSpace](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), this function returns `false`. If you pass a string and a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) with that `name` does not exist in the [RayTracingShader.keywordSpace](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), this function returns `false`.

The version of this function that takes a string as a parameter is slower than the version that takes a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md). If you call this function more than once, it is best practice to create a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) struct, cache it, and use that.

**Note:** A `LocalKeyword` is specific to a single [Shader](/engine/6000.3/script-reference/unityengine/shader.md), [ComputeShader](/engine/6000.3/script-reference/unityengine/computeshader.md) or [RayTracingShader](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader.md) instance. You cannot use it with other [Shader](/engine/6000.3/script-reference/unityengine/shader.md), [ComputeShader](/engine/6000.3/script-reference/unityengine/computeshader.md) or [RayTracingShader](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader.md) instances, even if they declare keywords with the same name.

This example iterates over the local shader keywords in the local keyword space for a ray tracing shader. It determines whether they are overridden by a global shader keyword, and prints their state.

```csharp
using UnityEngine;
using UnityEngine.Rendering;

public class Example : MonoBehaviour
{
    public RayTracingShader rayTracingShader;

    void Start()
    {
        CheckShaderKeywordState();
    }

    void CheckShaderKeywordState()
    {
        // Get all the local keywords that affect the RayTracingShader
        var keywordSpace = rayTracingShader.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 = rayTracingShader.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
                Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state);
            }
        }
    }
}
```

Additional Resources: Shader variants and keywords, [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md), [GlobalKeyword](/engine/6000.3/script-reference/unityengine/rendering/globalkeyword.md), [RayTracingShader.EnableKeyword](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/enablekeyword.md), [RayTracingShader.DisableKeyword](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/disablekeyword.md), [RayTracingShader.SetKeyword](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/setkeyword.md), [RayTracingShader.keywordSpace](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), [RayTracingShader.enabledKeywords](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/enabledkeywords.md), [RayTracingShader.shaderKeywords](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/shaderkeywords.md).

## IsKeywordEnabled(LocalKeyword)

Checks whether a local shader keyword is enabled for this ray tracing shader.

```csharp
public bool IsKeywordEnabled(in LocalKeyword keyword)
```

### Parameters

**** (\[LocalKeyword]\(/engine/6000.3/script-reference/unityengine/rendering/localkeyword)): The local keyword to check.

### Returns

| Type                                                          | Description                                                                                                                                                                       |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | Returns true if the given [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) is enabled for this ray tracing shader. Otherwise, returns false. |

### Remarks

Shader keywords determine which shader variants Unity uses. For information on working with [local shader keywords](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) and [global shader keywords](/engine/6000.3/script-reference/unityengine/rendering/globalkeyword.md) and how they interact, see [Using shader keywords with C# scripts](/engine/6000.3/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/shader-keywords-scripts.md).

If you pass in a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) and it does not exist in the [RayTracingShader.keywordSpace](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), this function returns `false`. If you pass a string and a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) with that `name` does not exist in the [RayTracingShader.keywordSpace](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), this function returns `false`.

The version of this function that takes a string as a parameter is slower than the version that takes a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md). If you call this function more than once, it is best practice to create a [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md) struct, cache it, and use that.

**Note:** A `LocalKeyword` is specific to a single [Shader](/engine/6000.3/script-reference/unityengine/shader.md), [ComputeShader](/engine/6000.3/script-reference/unityengine/computeshader.md) or [RayTracingShader](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader.md) instance. You cannot use it with other [Shader](/engine/6000.3/script-reference/unityengine/shader.md), [ComputeShader](/engine/6000.3/script-reference/unityengine/computeshader.md) or [RayTracingShader](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader.md) instances, even if they declare keywords with the same name.

This example iterates over the local shader keywords in the local keyword space for a ray tracing shader. It determines whether they are overridden by a global shader keyword, and prints their state.

```csharp
using UnityEngine;
using UnityEngine.Rendering;

public class Example : MonoBehaviour
{
    public RayTracingShader rayTracingShader;

    void Start()
    {
        CheckShaderKeywordState();
    }

    void CheckShaderKeywordState()
    {
        // Get all the local keywords that affect the RayTracingShader
        var keywordSpace = rayTracingShader.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 = rayTracingShader.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
                Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state);
            }
        }
    }
}
```

Additional Resources: Shader variants and keywords, [LocalKeyword](/engine/6000.3/script-reference/unityengine/rendering/localkeyword.md), [GlobalKeyword](/engine/6000.3/script-reference/unityengine/rendering/globalkeyword.md), [RayTracingShader.EnableKeyword](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/enablekeyword.md), [RayTracingShader.DisableKeyword](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/disablekeyword.md), [RayTracingShader.SetKeyword](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/setkeyword.md), [RayTracingShader.keywordSpace](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), [RayTracingShader.enabledKeywords](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/enabledkeywords.md), [RayTracingShader.shaderKeywords](/engine/6000.3/script-reference/unityengine/rendering/raytracingshader/shaderkeywords.md).
