Advertisement
ArenMook

Custom material editor

May 5th, 2016
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.74 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEditor;
  3.  
  4. [CanEditMultipleObjects]
  5. [CustomEditor(typeof(Material), true)]
  6. public class CustomMaterialEditor : MaterialEditor
  7. {
  8.     string[] mRenderQueueNames = new string[]
  9.     {
  10.         "Set in shader",
  11.         "Background",
  12.         "Geometry",
  13.         "AlphaTest",
  14.         "Transparent",
  15.         "Overlay",
  16.     };
  17.    
  18.     int[] mRenderQueueValues = new int[]
  19.     {
  20.         -1,
  21.         1000,
  22.         2000,
  23.         2450,
  24.         3000,
  25.         4000,
  26.     };
  27.  
  28.     int GetClosest (int val)
  29.     {
  30.         int minDist = int.MaxValue;
  31.         int minVal = 0;
  32.  
  33.         for (int i = 0; i < mRenderQueueValues.Length; ++i)
  34.         {
  35.             int dist = Mathf.Abs(val - mRenderQueueValues[i]);
  36.            
  37.             if (dist < minDist)
  38.             {
  39.                 minDist = dist;
  40.                 minVal = i;
  41.             }
  42.         }
  43.         return minVal;
  44.     }
  45.  
  46.     public override void OnInspectorGUI ()
  47.     {
  48.         EditorGUIUtility.labelWidth = 80;
  49.         serializedObject.Update();
  50.  
  51.         if (serializedObject.isEditingMultipleObjects)
  52.         {
  53.             serializedObject.DrawProperty("m_CustomRenderQueue", "Render Q");
  54.         }
  55.         else
  56.         {
  57.             var prop = serializedObject.FindProperty("m_CustomRenderQueue");
  58.             int closestQueue = GetClosest(prop.intValue);
  59.             int offset = prop.intValue - mRenderQueueValues[closestQueue];
  60.  
  61.             GUI.changed = false;
  62.  
  63.             GUILayout.BeginHorizontal();
  64.             int desiredQueue = EditorGUILayout.Popup("Render Q", closestQueue, mRenderQueueNames);
  65.             if (desiredQueue == 0) offset = 0;
  66.             EditorGUILayout.LabelField("+", GUILayout.Width(14f));
  67.  
  68.             EditorGUI.BeginDisabledGroup(desiredQueue == 0);
  69.             offset = EditorGUILayout.IntField(offset, GUILayout.Width(64f));
  70.             EditorGUI.EndDisabledGroup();
  71.             GUILayout.EndHorizontal();
  72.  
  73.             if (GUI.changed) prop.intValue = mRenderQueueValues[desiredQueue] + offset;
  74.         }
  75.  
  76.         serializedObject.ApplyModifiedProperties();
  77.         base.OnInspectorGUI();
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement