このページには、ShaderLab コードの CustomEditor
または CustomEditorForRenderPipeline
ブロックを使用して、カスタムエディター を割り当てるための情報が記載されています。
カスタムエディターを使用して、Unity のデフォルトのマテリアルインスペクターでは表示できないデータタイプを表示したり、カスタムコントロールやデータ検証を定義します。
機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
---|---|---|---|---|
ShaderLab: CustomEditor ブロック | あり | あり | あり | あり |
ShaderLab: CustomEditorForRenderPipeline ブロック | なし | あり | あり | あり |
ShaderLab では、すべてのレンダーパイプラインにカスタムエディターを割り当てることができます。これを行うには、CustomEditor
ブロックを Shader
ブロック内に配置します。また、 CustomEditorForRenderPipeline
ブロックを Shader
ブロックの中に配置することで、スクリプタブルレンダーパイプラインに基づいてレンダーパイプラインに様々なカスタムエディターを割り当てることができます。コードに 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)
{
// Inspector の表示を制御するカスタムコードをここに記述
base.OnGUI (materialEditor, properties);
}
}
このサンプルコードは CustomEditor
ブロックを使用して、シェーダーアセット用にデフォルトのカスタムエディターを指定してから、CustomEditorForRenderPipeline
ブロックを使用して、特定のレンダーパイプラインアセット用に 2 つの追加カスタムエディターを指定する構文を示しています。
Shader "Examples/UsesCustomEditor"
{
// Unity エディターは ExampleCustomEditor クラスを使って、このシェーダーアセットの Inspector を設定します
CustomEditor "ExampleShaderGUI"
CustomEditorForRenderPipeline "ExampleRenderPipelineShaderGUI" "ExampleRenderPipelineAsset"
CustomEditorForRenderPipeline "OtherExampleRenderPipelineShaderGUI" "OtherExampleRenderPipelineAsset"
SubShader
{
//SubShader を定義するコードをここに記述
Pass
{
// Pass を定義するコードをここに記述
}
}
}