Version: 2021.1
ShaderLab: assigning a fallback
ShaderLab: defining a SubShader

ShaderLab: assigning a custom editor

This page contains information on using a CustomEditor or CustomEditorForRenderPipeline block in your ShaderLab code to assign custom editors.

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.

렌더 파이프라인 호환성

Feature name 빌트인 렌더 파이프라인 유니버설 렌더 파이프라인(URP) 고해상도 렌더 파이프라인(HDRP) Custom SRP
ShaderLab: CustomEditor block 지원 지원 지원 지원
ShaderLab: CustomEditorForRenderPipeline block 지원 안 함 지원 지원 지원

Using the CustomEditor and CustomEditorForRenderPipeline 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. 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 기능
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.

Creating a custom editor class for a shader asset

To define a custom editor for shader 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);
    }
}

예제

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.
        }
    }
}
ShaderLab: assigning a fallback
ShaderLab: defining a SubShader