public struct ShaderTagId : IEquatable<ShaderTagId>
Remarks
Refers to either the name or value of a SubShader or Pass tag. This struct is used as an efficient representation of a "unique" tag string, meaning that two
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}'."); } } } } }}