}
//--------------------------------- Shader GUI-------------------------------------------------------------------------------------------------------------------------------------------
using UnityEngine;
using UnityEditor;
using Object = UnityEngine.Object;
using System;
internal class BlendShaderGUI : ShaderGUI
{
private static class Styles
{
public static GUIContent albedo = new GUIContent("Albedo", "Albedo (RGB) Emissive (A)");
public static GUIContent specular = new GUIContent("Specular", "Specular (RGB) and Smoothness (A)");
public static GUIContent normal = new GUIContent("Normal", "Normal Map");
public static GUIContent blendMask = new GUIContent("Mask", "Mask (A) -> blend");
public static string material0Header = "Primary Maps";
public static string material1Header = "Secondary Maps";
public static string maskHeader = "Blend : Mask";
}
MaterialProperty blendMask = null;
MaterialProperty albedoMap = null;
MaterialProperty specularMap = null;
MaterialProperty bumpMap = null;
MaterialProperty albedoMap2 = null;
MaterialProperty specularMap2 = null;
MaterialProperty bumpMap2 = null;
const int kSecondLevelIndentOffset = 2;
const float kVerticalSpacing = 2f;
public void FindProperties (MaterialProperty[] props)
{
blendMask = FindProperty ("_Mask", props);
albedoMap = FindProperty ("_MainTex", props);
albedoMap2 = FindProperty ("_MainTex2", props);
specularMap = FindProperty ("_SpecGlossMap", props);
specularMap2 = FindProperty ("_SpecGlossMap2", props);
bumpMap = FindProperty ("_NormalMap", props);
bumpMap2 = FindProperty ("_NormalMap2", props);
}
public override void OnGUI (MaterialEditor materialEditor, MaterialProperty[] props)
{
FindProperties (props); // MaterialProperties can be animated so we do not cache them but fetch them every event to ensure animated values are updated correctly
// Use default labelWidth
EditorGUIUtility.labelWidth = 0f;
// Detect any changes to the material
EditorGUI.BeginChangeCheck();
{
GUILayout.Label (Styles.material0Header, EditorStyles.boldLabel);
// Texture
materialEditor.TexturePropertySingleLine (Styles.albedo, albedoMap);
materialEditor.TexturePropertySingleLine (Styles.specular, specularMap);
materialEditor.TexturePropertySingleLine (Styles.normal, bumpMap);
materialEditor.TextureScaleOffsetProperty (albedoMap);
GUILayout.Label (Styles.maskHeader, EditorStyles.boldLabel);
materialEditor.TexturePropertySingleLine (Styles.blendMask, blendMask);
materialEditor.TextureScaleOffsetProperty (blendMask);
GUILayout.Label (Styles.material1Header, EditorStyles.boldLabel);
materialEditor.TexturePropertySingleLine (Styles.albedo, albedoMap2);
materialEditor.TexturePropertySingleLine (Styles.specular, specularMap2);
materialEditor.TexturePropertySingleLine (Styles.normal, bumpMap2);
materialEditor.TextureScaleOffsetProperty (albedoMap2);
}
}
}