Unity ShaderLab: 커스텀 에디터 할당
이 문서는 Unity의 ShaderLab에서 커스텀 에디터를 할당하는 방법에 대해 설명합니다. 커스텀 에디터를 사용하면 기본 머티리얼 인스펙터에서 제공하지 않는 데이터 타입을 표현하거나, 사용자 지정 컨트롤을 정의할 수 있습니다.
커스텀 에디터 사용 가능성
| 기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인 (URP) | 고해상도 렌더 파이프라인 (HDRP) |
|---|---|---|---|
| CustomEditor 블록 | 지원 | 지원 | 지원 |
| CustomEditorForRenderPipeline 블록 | 지원 안 함 | 지원 | 지원 |
모든 렌더 파이프라인에서 커스텀 에디터를 할당하려면 Shader 블록 내에 CustomEditor 블록을 추가하면 됩니다. 특정 렌더 파이프라인에 기반한 커스텀 에디터는 CustomEditorForRenderPipeline 블록을 사용하여 할당할 수 있습니다.
서명
CustomEditor "[커스텀 에디터 클래스명]": Unity는 이 클래스에 정의된 커스텀 에디터를 사용합니다. 단,CustomEditorForRenderPipeline블록에 의해 오버라이드되지 않는 한 적용됩니다.CustomEditorForRenderPipeline "[커스텀 에디터 클래스명]" "[렌더 파이프라인 에셋 클래스명]": 현재 활성화된 렌더 파이프라인이 지정된 타입일 때, 해당 커스텀 에디터를 사용합니다.
커스텀 에디터 클래스 생성
특정 셰이더 오브젝트를 나타내는 셰이더 에셋의 커스텀 에디터를 정의하려면 ShaderGUI 클래스를 상속받는 스크립트를 생성합니다. 이 스크립트는 Assets 폴더 내의 Editor 폴더에 위치해야 합니다. 아래는 기본적인 스크립트 형식입니다.
using UnityEditor;
public class ExampleShaderGUI : ShaderGUI
{
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
// 인스펙터의 모양을 제어하는 커스텀 코드
base.OnGUI(materialEditor, properties);
}
}
예제 코드
아래는 CustomEditor 블록을 사용하는 셰이더 에셋의 기본 커스텀 에디터 지정 예제입니다. 또한 렌더 파이프라인에 따라 추가 커스텀 에디터를 두 개 설정하는 구문을 보여줍니다.
Shader "Examples/UsesCustomEditor"
{
CustomEditor "ExampleShaderGUI"
CustomEditorForRenderPipeline "ExampleRenderPipelineShaderGUI" "ExampleRenderPipelineAsset"
CustomEditorForRenderPipeline "OtherExampleRenderPipelineShaderGUI" "OtherExampleRenderPipelineAsset"
SubShader
{
Pass
{
// 패스를 정의하는 코드
}
}
}
결론
이 문서에서는 ShaderLab에서 커스텀 에디터를 설정하는 방법과 관련된 내용을 다루었습니다. 커스텀 에디터는 Unity에서 더욱 유연하고 사용자 친화적인 인터페이스를 만드는 데 중요한 역할을 합니다. 이를 통해, 필요한 기능을 효과적으로 구현하고 시각적으로 개선할 수 있습니다.