从中派生内容的抽象类,用于定义着色器属性的自定义 GUI 以及扩展材质预览。
从此类派生以控制应该如何显示着色器属性。对于要使用此自定义 GUI 的着色器,请使用着色器中的“CustomEditor”属性。请注意,CustomEditor 也可以用于从 MaterialEditor 派生的类(搜索:自定义材质编辑器)。注意:只有 ShaderGUI 方法适用于 Substance 材质,因此这是着色器自定义 GUI 的推荐方法。 请参阅 ShaderGUI.OnGUI、ShaderGUI.OnMaterialPreviewGUI、ShaderGUI.OnMaterialPreviewSettingsGUI。
Shader "example" { // properties and subshaders here... // ...
CustomEditor "CustomShaderGUI" }
using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Linq;
public class CustomShaderGUI : ShaderGUI { override public void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) { // render the shader properties using the default GUI base.OnGUI(materialEditor, properties);
// get the current keywords from the material Material targetMat = materialEditor.target as Material; string[] keyWords = targetMat.shaderKeywords;
// see if redify is set, then show a checkbox bool redify = keyWords.Contains("REDIFY_ON"); EditorGUI.BeginChangeCheck(); redify = EditorGUILayout.Toggle("Redify material", redify); if (EditorGUI.EndChangeCheck()) { // if the checkbox is changed, reset the shader keywords var keywords = new List<string> { redify ? "REDIFY_ON" : "REDIFY_OFF" }; targetMat.shaderKeywords = keywords.ToArray(); EditorUtility.SetDirty(targetMat); } } }
AssignNewShaderToMaterial | 为某个材质选择新着色器时调用此方法。 |
OnGUI | 要定义自定义着色 GUI,请使用 materialEditor 的方法为properties 数组渲染控件。 |
OnMaterialPreviewGUI | 覆盖以扩展预览区域的渲染,或通过不调用 base.OnMaterialPreviewGUI 完全替代预览。 |
OnMaterialPreviewSettingsGUI | 覆盖以扩展预览区域工具栏的功能,或通过不调用 base.OnMaterialPreviewSettingsGUI 完全替代工具栏。 |
FindProperty | 查找着色器属性。 |