用于派生的抽象类,用于为着色器属性定义自定义 GUI,以及扩展材质预览。
从此类派生以控制应如何呈现着色器属性。要让着色器使用此自定义 GUI,请在着色器中使用“CustomEditor”属性。请注意,CustomEditor 也可以用于从 MaterialEditor 派生的类(搜索:自定义材质编辑器)。注意:只有 ShaderGUI 方法适用于 Substance 材质,因此,这是用于着色器自定义 GUI 的推荐方法。参见 ShaderGUI.OnGUI、ShaderGUI.OnMaterialPreviewGUI、ShaderGUI.OnMaterialPreviewSettingsGUI。
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 | 当为材质选择新着色器时,将调用此方法。 |
OnClosed | 当 ShaderGUI 关闭时,将调用此方法。 |
OnGUI | 要定义自定义着色器 GUI,请使用 materialEditor 的方法来渲染属性数组的控件。 |
OnMaterialPreviewGUI | 覆盖以扩展预览区域的渲染,或完全替换预览(不调用 base.OnMaterialPreviewGUI)。 |
OnMaterialPreviewSettingsGUI | 覆盖以扩展预览区域工具栏的功能,或完全替换工具栏(不调用 base.OnMaterialPreviewSettingsGUI)。 |
ValidateMaterial | 当用户使用此 ShaderGUI 将材质加载到内存或更改检查器中的值时,编辑器会调用此方法。 |
FindProperty | 查找着色器属性。 |