# ShaderTagId

> Unique identifier for a shader tag name or value.

## Definition

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

```csharp
public struct ShaderTagId : IEquatable<ShaderTagId>
```

## Remarks

Refers to either the name or value of a [SubShader](/engine/6000.5/manual/materials-and-shaders/shaders/reference/sl-reference/sl-sub-shader-object/tags.md) or [Pass](/engine/6000.5/manual/materials-and-shaders/shaders/reference/sl-reference/sl-sub-shader-pass/sl-pass-tags.md) tag. This struct is used as an efficient representation of a "unique" tag string, meaning that two `ShaderTagId`s referring from the same string are equal.

Additional Resources: [DrawingSettings](/engine/6000.5/script-reference/unityengine/rendering/drawingsettings.md), [RendererListParams](/engine/6000.5/script-reference/unityengine/rendering/rendererlistparams.md), [ShaderData.Subshader.FindTagValue](/engine/6000.5/script-reference/unityeditor/shaderdata/subshader/findtagvalue.md).

## Examples

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

// Adds a new Editor menu item called Example. Select a shader
// asset in the Project window, then select
// Example > PrintLightModeTagExample from the Editor menu. The value of all
// "LightMode" tags present in any pass of the shader will be printed to
// the console.
public class PrintLightModeTagExample
{
    [MenuItem("Example/PrintLightModeTagExample")]
    static void MenuCallback()
    {
        // If the selected object is a shader...
        if (Selection.activeObject is Shader selectedShader)
        {
            // For each subshader...
            ShaderData selectedShaderData = ShaderUtil.GetShaderData(selectedShader);
            for (int subShaderIndex = 0; subShaderIndex < selectedShaderData.SubshaderCount; ++subShaderIndex)
            {
                // For each pass...
                ShaderData.Subshader subShaderData = selectedShaderData.GetSubshader(subShaderIndex);
                for (int passIndex = 0; passIndex < subShaderData.PassCount; ++passIndex)
                {
                    ShaderData.Pass passData = subShaderData.GetPass(passIndex);

                    // If the pass has a "LightMode" tag, print its value
                    ShaderTagId lightModeValue = passData.FindTagValue(new ShaderTagId("LightMode"));
                    if (lightModeValue != ShaderTagId.none)
                    {
                        Debug.Log($"Pass '{passData.Name}' in SubShader {subShaderIndex} of "
                            + $"Shader '{selectedShader.name}' has LightMode '{lightModeValue.name}'.");
                    }
                }
            }
        }
    }
}
```

## Static Fields

| Value                                                                             | Description                                            |
| --------------------------------------------------------------------------------- | ------------------------------------------------------ |
| [none](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/none.md) | Describes a `ShaderTagId` not referring to any string. |

## Constructors

| Constructor                                                                                             | Description                                                    |
| ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| [ShaderTagId(System.String)](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/ctor.md) | Gets or creates a `ShaderTagId` representing the given string. |

## Properties

| Property                                                                          | Description                                   |
| --------------------------------------------------------------------------------- | --------------------------------------------- |
| [name](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/name.md) | Gets the string this `ShaderTagId` refers to. |

## Methods

| Method                                                                                          | Description                                                                   |
| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Equals](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/equals.md)           | Checks if this shader tag identifier and the object refer to the same string. |
| [GetHashCode](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/gethashcode.md) | Converts this `ShaderTagId` to a hash code.                                   |

## Operators

| Operator                                                                                          | Description                                            |
| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| [operator ==](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/op-equality.md)   | Checks if two `ShaderTagId`s refer to the same string. |
| [ShaderTagId](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/op-explicit.md)   | Converts a string to a `ShaderTagId`.                  |
| [string](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/op-explicit.md)        | Converts a `ShaderTagId` to a string.                  |
| [operator !=](/engine/6000.5/script-reference/unityengine/rendering/shadertagid/op-inequality.md) | Checks if two `ShaderTagId`s aren't equal.             |
