Unity Shader初涉之 -- 布尔值控制Shader使用哪种计算


最近开始学习Shader,深深被它的功能所折服,而在使用时会产生一个需求,能不能用一个布尔值去控制Shader的运算逻辑,可以让他展示两套不同的表现形式,在翻看有关Shader的书籍时看到了这一部分,特此记录:

using UnityEngine;
using UnityEditor;
using System;


public class CustomShaderGUI : ShaderGUI
{
public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties)
{
// render the default gui
base.OnGUI(materialEditor, properties);

Material targetMat = materialEditor.target as Material;

// see if redify is set, and show a checkbox
bool redify = Array.IndexOf(targetMat.shaderKeywords, "REDIFY_ON") != -1;
EditorGUI.BeginChangeCheck();
redify = EditorGUILayout.Toggle("Redify material", redify);
if (EditorGUI.EndChangeCheck())
{
// enable or disable the keyword based on checkbox
if (redify)
targetMat.EnableKeyword("REDIFY_ON");
else
targetMat.DisableKeyword("REDIFY_ON");
}
}
}

原理也很简单,利用编辑器扩展类去实现添加选项,将这个结果运用于shader中,在shader中添加 CustomEditor "CustomShaderGUI" 直接可以利用了

你可能感兴趣的:(unity)