从中派生内容的抽象类,用于定义着色器属性的自定义 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 的方法为properties 数组渲染控件。 |
OnMaterialPreviewGUI | 覆盖以扩展预览区域的渲染,或通过不调用 base.OnMaterialPreviewGUI 完全替代预览。 |
OnMaterialPreviewSettingsGUI | 覆盖以扩展预览区域工具栏的功能,或通过不调用 base.OnMaterialPreviewSettingsGUI 完全替代工具栏。 |
FindProperty | 查找着色器属性。 |
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.