This page contains information on using a CustomEditor
or CustomEditorForRenderPipeline
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.
Feature name | Built-in Render PipelineA 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 |
Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Custom SRP |
---|---|---|---|---|
ShaderLab: CustomEditor block | Yes | Yes | Yes | Yes |
ShaderLab: CustomEditorForRenderPipeline block | No | Yes | Yes | Yes |
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. 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.
Signature | Function |
---|---|
CustomEditor “[custom editor class name]” | Unity uses the custom editor defined in the named class, unless this is overridden by a CustomEditorForRenderPipeline block. |
CustomEditorForRenderPipeline “[custom editor class name]” “[render pipeline asset class name]” | When the active Render Pipeline Asset is the named type, Unity uses the custom editor defined in the named class. |
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);
}
}
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.
}
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.