# LocalKeyword

> Represents a shader keyword declared in a shader source file.

## Definition

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

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

## Remarks

Shader keywords determine which shader variants Unity uses. You can use a `LocalKeyword` to enable, disable, or check the state of a **local** shader keyword. For information on working with local shader keywords and [global shader keywords](/engine/6000.7/script-reference/unityengine/rendering/globalkeyword.md) and how they interact, see [Using shader keywords with C# scripts](/engine/6000.7/manual/materials-and-shaders/shaders/writing-custom/shader-writing/sl-multiple-program-variants/shader-keywords-scripts.md).

When you declare a shader keyword in the source file for a [Shader](/engine/6000.7/script-reference/unityengine/shader.md), [ComputeShader](/engine/6000.7/script-reference/unityengine/computeshader.md) or [RayTracingShader](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader.md), Unity represents the keyword with a `LocalKeyword` and stores it in a [LocalKeywordSpace](/engine/6000.7/script-reference/unityengine/rendering/localkeywordspace.md).

For a [Shader](/engine/6000.7/script-reference/unityengine/shader.md):

* To set the state of a local shader keyword, use [Material.SetKeyword](/engine/6000.7/script-reference/unityengine/material/setkeyword.md), [Material.EnableKeyword](/engine/6000.7/script-reference/unityengine/material/enablekeyword.md), or [Material.DisableKeyword](/engine/6000.7/script-reference/unityengine/material/disablekeyword.md).
* To check the state of a local shader keyword, use [Material.IsKeywordEnabled](/engine/6000.7/script-reference/unityengine/material/iskeywordenabled.md) or [Material.enabledKeywords](/engine/6000.7/script-reference/unityengine/material/enabledkeywords.md).
* To access the `LocalKeywordSpace`, use [Material.shader](/engine/6000.7/script-reference/unityengine/material/shader.md) to access the [Shader](/engine/6000.7/script-reference/unityengine/shader.md) that the material uses, and then use [Shader.keywordSpace](/engine/6000.7/script-reference/unityengine/shader/keywordspace.md).

For a [ComputeShader](/engine/6000.7/script-reference/unityengine/computeshader.md):

* To set the state of a local shader keyword, use [ComputeShader.SetKeyword](/engine/6000.7/script-reference/unityengine/computeshader/setkeyword.md), [ComputeShader.EnableKeyword](/engine/6000.7/script-reference/unityengine/computeshader/enablekeyword.md), or [ComputeShader.DisableKeyword](/engine/6000.7/script-reference/unityengine/computeshader/disablekeyword.md).
* To check the state of a local shader keyword, use [ComputeShader.IsKeywordEnabled](/engine/6000.7/script-reference/unityengine/computeshader/iskeywordenabled.md) or [ComputeShader.enabledKeywords](/engine/6000.7/script-reference/unityengine/computeshader/enabledkeywords.md).
* To access the `LocalKeywordSpace`, use [ComputeShader.keywordSpace](/engine/6000.7/script-reference/unityengine/computeshader/keywordspace.md).

For a [RayTracingShader](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader.md):

* To set the state of a local shader keyword, use [RayTracingShader.SetKeyword](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/setkeyword.md), [RayTracingShader.EnableKeyword](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/enablekeyword.md), or [RayTracingShader.DisableKeyword](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/disablekeyword.md).
* To check the state of a local shader keyword, use [RayTracingShader.IsKeywordEnabled](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/iskeywordenabled.md) or [RayTracingShader.enabledKeywords](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/enabledkeywords.md).
* To access the `LocalKeywordSpace`, use [RayTracingShader.keywordSpace](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader/keywordspace.md).

In addition to this, you can also enable or disable a local or global keyword with a `CommandBuffer`. To do this, use [CommandBuffer.SetKeyword](/engine/6000.7/script-reference/unityengine/rendering/commandbuffer/setkeyword.md), [CommandBuffer.EnableKeyword](/engine/6000.7/script-reference/unityengine/rendering/commandbuffer/enablekeyword.md), or [CommandBuffer.DisableKeyword](/engine/6000.7/script-reference/unityengine/rendering/commandbuffer/disablekeyword.md).

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

Additional Resources: Shader variants and keywords, [GlobalKeyword](/engine/6000.7/script-reference/unityengine/rendering/globalkeyword.md).

## Constructors

| Constructor                                                                                                                                                                              | Description                                                                                                                                                                                               |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [LocalKeyword(UnityEngine.ComputeShader,System.String)](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/ctor.md#localkeyword\(computeshader-string\))                 | Initializes and returns a LocalKeyword struct that represents an existing local shader keyword for a given [ComputeShader](/engine/6000.7/script-reference/unityengine/computeshader.md).                 |
| [LocalKeyword(UnityEngine.Rendering.RayTracingShader,System.String)](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/ctor.md#localkeyword\(raytracingshader-string\)) | Initializes and returns a LocalKeyword struct that represents an existing local shader keyword for a given [RayTracingShader](/engine/6000.7/script-reference/unityengine/rendering/raytracingshader.md). |
| [LocalKeyword(UnityEngine.Shader,System.String)](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/ctor.md#localkeyword\(shader-string\))                               | Initializes and returns a LocalKeyword struct that represents an existing local shader keyword for a given [Shader](/engine/6000.7/script-reference/unityengine/shader.md).                               |

## Properties

| Property                                                                                             | Description                                                                                  |
| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| [isDynamic](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/isdynamic.md)         | Specifies whether this local shader keyword is used for dynamic branching (Read Only).       |
| [isOverridable](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/isoverridable.md) | Whether this local shader keyword can be overridden by a global shader keyword. (Read Only). |
| [isValid](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/isvalid.md)             | Specifies whether this local shader keyword is valid (Read Only).                            |
| [name](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/name.md)                   | The name of the shader keyword (Read Only).                                                  |
| [type](/engine/6000.7/script-reference/unityengine/rendering/localkeyword/type.md)                   | The type of the shader keyword (Read Only).                                                  |

## Operators

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