# SetKeyword(in LocalKeyword, bool)

> Sets the state of a local shader keyword for this ray tracing shader.

## Definition

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

## SetKeyword(LocalKeyword, bool)

```csharp
public void SetKeyword(in LocalKeyword keyword, bool value)
```

### Parameters

**** (\[LocalKeyword]\(/engine/6000.6/script-reference/unityengine/rendering/localkeyword)): The [LocalKeyword](/engine/6000.6/script-reference/unityengine/rendering/localkeyword.md) keyword to enable or disable.**** (\[bool]\(https\://learn.microsoft.com/dotnet/api/system.boolean)): The desired keyword state.

### Remarks

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

When `value` is `true`, this function calls [RayTracingShader.EnableKeyword](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader/enablekeyword.md). Otherwise, it calls [RayTracingShader.DisableKeyword](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader/disablekeyword.md).

If the [LocalKeyword](/engine/6000.6/script-reference/unityengine/rendering/localkeyword.md) does not exist in the [RayTracingShader.keywordSpace](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), this function has no effect.

The following example toggles the state of all local shader keywords in a ray tracing shader.

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

public class Example : MonoBehaviour
{
    public RayTracingShader rayTracingShader;

    void Start()
    {
        // Get all the local keywords that affect the RayTracingShader
        var keywordSpace = rayTracingShader.keywordSpace;

        // Iterate over the local keywords
        foreach (var localKeyword in keywordSpace.keywords)
        {
            // Get the current state of the local keyword
            bool state = rayTracingShader.IsKeywordEnabled(localKeyword);

            // Toggle the state
            rayTracingShader.SetKeyword(localKeyword, !state);
        }
    }
}
```

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