Version: Unity 6 (6000.0)
Language : English
Set shader variables with material property values
Changing how shaders work via branching and keywords

Control material properties in the Inspector window

In the Unity Editor, you can control how material properties appear in the 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
window. The easiest way to do this is using a MaterialPropertyDrawer.

For more complex needs, you can use the MaterialEditor, MaterialProperty, and ShaderGUI classes.

Use a custom editor

Use custom editors to display data types that Unity can’t display using its default material Inspector, or to define custom controls or data validation.

In ShaderLabUnity’s language for defining the structure of Shader objects. More info
See in Glossary
, you can assign a custom editor for all render pipelinesA series of operations that take the contents of a Scene, and displays them on a screen. Unity lets you choose from pre-built render pipelines, or write your own. More info
See in Glossary
. To do this, you can place a CustomEditor block inside a Shader block. You can also assign different custom editors for render pipelines based on the Scriptable Render Pipeline by placing a CustomEditorForRenderPipeline block inside a Shader block. If your code contains both a CustomEditor and CustomEditorForRenderPipeline block, the render pipeline specific one overrides the CustomEditor one.

Create 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 objectAn instance of the Shader class, a Shader object is container for shader programs and GPU instructions, and information that tells Unity how to use them. Use them with materials to determine the appearance of your scene. More info
See in Glossary
, 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);
    }
}

Enable the default custom editor

This example code demonstrates the syntax for specifying a default custom editor for a shader asset using the CustomEditor block, and then specifying two additional custom editors for specific Render Pipeline Assets using the CustomEditorForRenderPipeline block.

Shader "Examples/UsesCustomEditor"
{
    // The Unity Editor uses the class ExampleCustomEditor to configure the Inspector for this shader asset
    CustomEditor "ExampleShaderGUI"
    CustomEditorForRenderPipeline "ExampleRenderPipelineShaderGUI" "ExampleRenderPipelineAsset"
    CustomEditorForRenderPipeline "OtherExampleRenderPipelineShaderGUI" "OtherExampleRenderPipelineAsset"

    SubShader
    {
        // Code that defines the SubShader goes here.

        Pass
        {                
              // Code that defines the Pass goes here.
        }
    }
}

Additional resources

Set shader variables with material property values
Changing how shaders work via branching and keywords