# ShaderBuildSettings.KeywordOverrideInfo

> Data representing a single keyword in a keyword declaration override.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEditor.Shaders](/engine/6000.7/script-reference/unityeditor/shaders.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
public struct ShaderBuildSettings.KeywordOverrideInfo
```

## Remarks

This struct identifies a shader keyword and determines if it should be kept in the build or stripped out.

Additional Resources: [ShaderBuildSettings](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings.md), [ShaderBuildSettings.KeywordDeclarationOverride](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings/keyworddeclarationoverride.md).

## Examples

```csharp
using System;
using System.Collections.Generic;
using UnityEditor.Rendering;
using UnityEditor.Shaders;
using UnityEngine;

using KeywordDeclarationOverride = UnityEditor.Shaders.ShaderBuildSettings.KeywordDeclarationOverride;
using KeywordOverrideInfo = UnityEditor.Shaders.ShaderBuildSettings.KeywordOverrideInfo;

public class ShaderBuildSettingsExample
{
    void AddKeywordDeclarationOverride()
    {
        // Get current shader build settings either from the currently active build profile
        // or if none is active, the global graphics settings.
        ShaderBuildSettings buildSettings = EditorGraphicsSettings.GetShaderBuildSettings();

        // Create a new keyword declaration override
        var newOverride = new KeywordDeclarationOverride
        {
            // Define the set of keywords to override
            keywords = new KeywordOverrideInfo[] { new("_", true), new("LINEAR_BEAUTY", true), new("EXPONENTIAL_BEAUTY", true) },

            // Use dynamic branching. Note: The shader import fails if the shader code isn't compatible with dynamic branching.
            variantGenerationMode = ShaderBuildSettings.ShaderVariantGenerationMode.SingleVariantWithDynamicBranching
        };

        // Check if each keyword is valid
        foreach (var kw in newOverride.keywords)
        {
            Debug.Log(kw.name + (kw.keepInBuild ? ": keep" : ": strip"));
            if (!kw.IsValid())
                return;
        }

        // Check if an override is valid.
        string validationErrors;
        if (!newOverride.IsValid(out validationErrors))
        {
            Debug.LogError(validationErrors);
            return;
        }

        // Get the copy of the existing overrides, and add the new overrides struct
        var kwDeclarationOverrides = new List<KeywordDeclarationOverride>(buildSettings.GetKeywordDeclarationOverridesCopy());
        kwDeclarationOverrides.Add(newOverride);

        // Set the modified keyword declaration overrides on the settings data struct. Throw an exception if the data is invalid.
        try
        {
            buildSettings.KeywordDeclarationOverrides = kwDeclarationOverrides.ToArray();
        }
        catch (ArgumentException ex)
        {
            Debug.LogError(ex.Message);
            return;
        }

        // Apply the modified settings data back to the Graphics settings or Build Profile settings
        EditorGraphicsSettings.SetShaderBuildSettings(buildSettings);
    }
}
```

## Fields

| Value                                                                                                                     | Description                                                                               |
| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| [keepInBuild](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings/keywordoverrideinfo/keepinbuild.md) | Determines if this keyword is kept in the build, or stripped as if it was never declared. |
| [name](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings/keywordoverrideinfo/name.md)               | The name of the keyword this override is targeting.                                       |

## Constructors

| Constructor                                                                                                                                              | Description                                                                                                                                                                                                                |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [KeywordOverrideInfo(System.String,System.Boolean)](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings/keywordoverrideinfo/ctor.md) | Creates a new settings data element for specifying a keyword in a [ShaderBuildSettings.KeywordDeclarationOverride](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings/keyworddeclarationoverride.md). |

## Methods

| Method                                                                                                            | Description                                                    |
| ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| [IsValid](/engine/6000.7/script-reference/unityeditor/shaders/shaderbuildsettings/keywordoverrideinfo/isvalid.md) | Validates the keyword name according to shader keyword syntax. |
