이 페이지는 ShaderLab 코드에서 CustomEditor
또는 CustomEditorForRenderPipeline
블록을 사용하여 커스텀 에디터를 할당하는 방법에 대한 정보를 포함합니다.
커스텀 에디터를 사용하여 Unity가 기본 머티리얼 인스펙터를 사용해서는 표시할 수 없는 데이터 타입을 표시하거나, 커스텀 컨트롤 또는 데이터 확인을 정의할 수 있습니다.
기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 SRP |
---|---|---|---|---|
ShaderLab: CustomEditor 블록 | 지원 | 지원 | 지원 | 지원 |
ShaderLab: 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.
}
}
}