Контроль свойств материала в окне Inspector
В Unity Editor вы можете управлять тем, как свойства материала отображаются в окне Inspector. Самый простой способ сделать это — использовать MaterialPropertyDrawer.
Для более сложных задач можно использовать классы MaterialEditor, MaterialPropertyи ShaderGUI.
Использование пользовательского редактора
Используйте пользовательские редакторы для отображения типов данных, которые Unity не может отображать, используя свой материал по умолчанию Inspector, или для определения пользовательских элементов управления или проверки данных.
В ShaderLab вы можете назначить пользовательский редактор для всех конвейеров рендеринга. Для этого вы можете поместить блок CustomEditor внутрь блока Shader. Вы также можете назначить различные пользовательские редакторы для конвейеров рендеринга, основанных на Scriptable Render Pipeline, поместив блок CustomEditorForRenderPipeline внутрь блока Shader. Если ваш код содержит блоки CustomEditor и CustomEditorForRenderPipeline, то блок, специфичный для конвейера рендеринга, переопределяет блок CustomEditor.
Создание класса пользовательского редактора для ассета шейдера
Чтобы определить пользовательский редактор для ассетов шейдера, представляющих определенный объект Shader, создайте скрипт, наследующий от ShaderGUI класс. Поместите свой скрипт в папку с именем Редактор, в вашем Ассеты папка.
Скрипт должен соответствовать следующему формату:
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, а затем указания двух дополнительных пользовательских редакторов для конкретных ассетов Render Pipeline с помощью блока 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.
}
}
}