Version: 2020.3
Language : English
ShaderLab: assigning a fallback
ShaderLab: defining a SubShader

ShaderLab: assigning a custom editor

This page contains information on using a CustomEditor block in your ShaderLabUnity’s language for defining the structure of Shader objects. More info
See in Glossary
code to assign custom editors.

Use custom editors to display data types that Unity can’t display using its default material InspectorA Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
See in Glossary
, or to define custom controls or data validation.

Render pipeline compatibility

Feature name Built-in Render Pipeline Universal Render Pipeline (URP) High Definition Render Pipeline (HDRP) Custom SRP
ShaderLab: CustomEditor block Yes Yes Yes Yes

Using CustomEditor blocks

In ShaderLab, you can assign a custom editor for all render pipelines. To do this, you can place a CustomEditor block inside a Shader block.

Signature Function
CustomEditor “[custom editor class name]” Unity uses the custom editor defined in the named class.

Creating a custom editor class for a shader asset

To define a custom editor for shaderA program that runs on the GPU. More info
See in Glossary
assets that represent a given Shader object, you create a script that inherits from the ShaderGUI class. Place your script in a folder named Editor, in your Assets folder.

The script should follow this format:

using UnityEditor;

public class ExampleShaderGUI : ShaderGUI 
{
    public override void OnGUI (MaterialEditor materialEditor, MaterialProperty[] properties)
    {
        // Custom code that controls the appearance of the Inspector goes here

        base.OnGUI (materialEditor, properties);
    }
}

Examples

This example code demonstrates the syntax for specifying a default custom editor for a shader asset using the CustomEditor block.

Shader "Examples/UsesCustomEditor"
{
    // The Unity Editor uses the class ExampleCustomEditor to configure the Inspector for this shader asset
    CustomEditor "ExampleShaderGUI"
    
    SubShader
    {
        // Code that defines the SubShader goes here.

        Pass
        {                
              // Code that defines the Pass goes here.
        }
    }
}
ShaderLab: assigning a fallback
ShaderLab: defining a SubShader