Уникальный идентификатор для имени или значения тега шейдера.
Относится к имени или значению SubShader или Пропуск тег. Эта структура служит компактным представлением «уникальной» строки-тега, то есть два ShaderTagIds, относящиеся к одной и той же строке, равны.
Дополнительные ресурсы: DrawingSettings, RendererListParams, ShaderData.Subshader.FindTagValue.
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}'.");
}
}
}
}
}
}