# LocalKeywordSpace

> Represents the local keyword space of a Shader, ComputeShader or RayTracingShader.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine.Rendering](/engine/6000.6/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule
* **Implements:** [IEquatable\<LocalKeywordSpace>](https://learn.microsoft.com/dotnet/api/system.iequatable-1)

```csharp
public readonly struct LocalKeywordSpace : IEquatable<LocalKeywordSpace>
```

## Remarks

Shader keywords determine which shader variants Unity uses. For information on working with local shader keywords 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 you declare a [shader keyword](/engine/6000.6/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/shader-keywords.md) in the source file for a [Shader](/engine/6000.6/script-reference/unityengine/shader.md), [ComputeShader](/engine/6000.6/script-reference/unityengine/computeshader.md) or [RayTracingShader](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader.md), Unity represents the keyword with a [LocalKeyword](/engine/6000.6/script-reference/unityengine/rendering/localkeyword.md) and stores it in a `LocalKeywordSpace`.

What keywords a space contains depends on the type of shader:

* For a [Shader](/engine/6000.6/script-reference/unityengine/shader.md), see [Shader.keywordSpace](/engine/6000.6/script-reference/unityengine/shader/keywordspace.md).
* For a [ComputeShader](/engine/6000.6/script-reference/unityengine/computeshader.md), see [ComputeShader.keywordSpace](/engine/6000.6/script-reference/unityengine/computeshader/keywordspace.md).
* For a [RayTracingShader](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader.md), see [RayTracingShader.keywordSpace](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader/keywordspace.md).

Additional Resources: [Introduction to shader variants](/engine/6000.6/manual/materials-and-shaders/shaders/shader-troubleshooting/shader-reducing/shader-variants/shader-variants.md), [LocalKeyword](/engine/6000.6/script-reference/unityengine/rendering/localkeyword.md), [GlobalKeyword](/engine/6000.6/script-reference/unityengine/rendering/globalkeyword.md), [ComputeShader.keywordSpace](/engine/6000.6/script-reference/unityengine/computeshader/keywordspace.md), [RayTracingShader.keywordSpace](/engine/6000.6/script-reference/unityengine/rendering/raytracingshader/keywordspace.md), [Shader.keywordSpace](/engine/6000.6/script-reference/unityengine/shader/keywordspace.md).

## Examples

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

// This example iterates over the local shader keywords in the local
// keyword space for a graphics shader. It determines whether each
// keyword is overridden by a global shader keyword and prints its
// state.
public class KeywordExample : MonoBehaviour
{
    public Material material;

    void Start()
    {
        CheckShaderKeywordState();
    }

    void CheckShaderKeywordState()
    {
        // Get the instance of the Shader class that the material uses
        Shader shader = material.shader;

        // Get all the local keywords that affect the Shader
        LocalKeywordSpace keywordSpace = shader.keywordSpace;

        // Iterate over the local keywords
        foreach (LocalKeyword 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
            {
                string state = material.IsKeywordEnabled(localKeyword) ? "enabled" : "disabled";
                Debug.Log("Local keyword with name of " + localKeyword.name + " is " + state);
            }
        }
    }
}
```

## Properties

| Property                                                                                                | Description                                                                                                                                                    |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [keywordCount](/engine/6000.6/script-reference/unityengine/rendering/localkeywordspace/keywordcount.md) | The number of local shader keywords in this local keyword space. (Read Only)                                                                                   |
| [keywordNames](/engine/6000.6/script-reference/unityengine/rendering/localkeywordspace/keywordnames.md) | An array containing the names of all local shader keywords in this local keyword space. (Read Only)                                                            |
| [keywords](/engine/6000.6/script-reference/unityengine/rendering/localkeywordspace/keywords.md)         | An array containing all [LocalKeyword](/engine/6000.6/script-reference/unityengine/rendering/localkeyword.md) structs in this local keyword space. (Read Only) |

## Methods

| Method                                                                                                | Description                                                                 |
| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| [FindKeyword](/engine/6000.6/script-reference/unityengine/rendering/localkeywordspace/findkeyword.md) | Searches for a local shader keyword with a given name in the keyword space. |

## Operators

| Operator                                                                                                | Description                                                                                 |
| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| [operator ==](/engine/6000.6/script-reference/unityengine/rendering/localkeywordspace/op-equality.md)   | Returns true if the local shader keyword spaces are the same. Otherwise, returns false.     |
| [operator !=](/engine/6000.6/script-reference/unityengine/rendering/localkeywordspace/op-inequality.md) | Returns true if the local shader keyword spaces are not the same. Otherwise, returns false. |
