Version: 2022.2
언어: 한국어
ShaderLab: 폴백 할당
ShaderLab: 서브셰이더 정의

ShaderLab: 커스텀 에디터 할당

이 페이지는 ShaderLab 코드에서 CustomEditor 또는 CustomEditorForRenderPipeline 블록을 사용하여 커스텀 에디터를 할당하는 방법에 대한 정보를 포함합니다.

커스텀 에디터를 사용하여 Unity가 기본 머티리얼 인스펙터를 사용해서는 표시할 수 없는 데이터 타입을 표시하거나, 커스텀 컨트롤 또는 데이터 확인을 정의할 수 있습니다.

렌더 파이프라인 호환성

기능 이름 빌트인 렌더 파이프라인 유니버설 렌더 파이프라인(URP) 고해상도 렌더 파이프라인(HDRP) 커스텀 SRP
ShaderLab: CustomEditor 블록 지원 지원 지원 지원
ShaderLab: CustomEditorForRenderPipeline 블록 지원 안 함 지원 지원 지원

CustomEditor 및 CustomEditorForRenderPipeline 블록 사용

ShaderLab에서 모든 렌더 파이프라인에 커스텀 에디터를 할당할 수 있습니다. 이를 수행하려면 Shader 블록 내에 CustomEditor 블록을 넣습니다. Shader 블록 내에 CustomEditorForRenderPipeline 블록을 넣어 스크립터블 렌더 파이프라인에 기반해 렌더 파이프라인에 각기 다른 커스텀 에디터를 할당할 수도 있습니다. 코드가 CustomEditor 블록과 CustomEditorForRenderPipeline 블록을 모두 포함하는 경우, 렌더 파이프라인별 블록이 CustomEditor 블록을 오버라이드합니다.

서명 기능
CustomEditor “[커스텀 에디터 클래스명]” Unity는 이름이 지정된 클래스에 정의된 커스텀 에디터가 CustomEditorForRenderPipeline 블록에 의해 오버라이드되지 않는 한, 해당 커스텀 에디터를 사용합니다.
CustomEditorForRenderPipeline “[커스텀 에디터 클래스명]” “[렌더 파이프라인 에셋 클래스명]” 활성 렌더 파이프라인 에셋이 이름이 지정된 타입인 경우, Unity는 이름이 지정된 클래스에 정의된 커스텀 에디터를 사용합니다.

셰이더 에셋의 커스텀 에디터 클래스 생성

특정 셰이더 오브젝트를 나타내는 셰이더 에셋의 커스텀 에디터를 정의하려면 ShaderGUI 클래스에서 상속하는 스크립트를 생성하십시오. Assets 폴더 안의 Editor 폴더에 스크립트를 넣으십시오.

스크립트는 다음 형식을 준수해야 합니다.

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);
    }
}

예제

이 예제 코드는 CustomEditor 블록을 사용하는 셰이더 에셋에 기본 커스텀 에디터를 지정한 다음, CustomEditorForRenderPipeline 블록을 사용하는 특정 렌더 파이프라인 에셋에 추가 커스텀 에디터를 두 개 지정하는 구문을 나타냅니다.

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: 폴백 할당
ShaderLab: 서브셰이더 정의