# keywordSpace

> The local keyword space of this shader.

## Definition

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

```csharp
public LocalKeywordSpace keywordSpace { get; }
```

### 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).

`keywordSpace` contains:

* All keywords [declared in the source file](/engine/6000.6/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/declare.md).
* All keywords declared in dependencies of that source file. This means all Shaders that are included via the [Fallback command](/engine/6000.6/manual/materials-and-shaders/shaders/reference/sl-reference/sl-shader-object/sl-fallback.md), and all Passes that are included via the [UsePass command](/engine/6000.6/manual/materials-and-shaders/shaders/reference/sl-reference/sl-sub-shader-object/sl-use-pass.md).
* All built-in keywords.

This property only describes the space of all local keywords for this shader. To change the state of any keyword, see [Material.EnableKeyword](/engine/6000.6/script-reference/unityengine/material/enablekeyword.md) and [Material.DisableKeyword](/engine/6000.6/script-reference/unityengine/material/disablekeyword.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);
            }
        }
    }
}
```
