Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEditor;
- [CanEditMultipleObjects]
- [CustomEditor(typeof(Material), true)]
- public class CustomMaterialEditor : MaterialEditor
- {
- string[] mRenderQueueNames = new string[]
- {
- "Set in shader",
- "Background",
- "Geometry",
- "AlphaTest",
- "Transparent",
- "Overlay",
- };
- int[] mRenderQueueValues = new int[]
- {
- -1,
- 1000,
- 2000,
- 2450,
- 3000,
- 4000,
- };
- int GetClosest (int val)
- {
- int minDist = int.MaxValue;
- int minVal = 0;
- for (int i = 0; i < mRenderQueueValues.Length; ++i)
- {
- int dist = Mathf.Abs(val - mRenderQueueValues[i]);
- if (dist < minDist)
- {
- minDist = dist;
- minVal = i;
- }
- }
- return minVal;
- }
- public override void OnInspectorGUI ()
- {
- EditorGUIUtility.labelWidth = 80;
- serializedObject.Update();
- if (serializedObject.isEditingMultipleObjects)
- {
- serializedObject.DrawProperty("m_CustomRenderQueue", "Render Q");
- }
- else
- {
- var prop = serializedObject.FindProperty("m_CustomRenderQueue");
- int closestQueue = GetClosest(prop.intValue);
- int offset = prop.intValue - mRenderQueueValues[closestQueue];
- GUI.changed = false;
- GUILayout.BeginHorizontal();
- int desiredQueue = EditorGUILayout.Popup("Render Q", closestQueue, mRenderQueueNames);
- if (desiredQueue == 0) offset = 0;
- EditorGUILayout.LabelField("+", GUILayout.Width(14f));
- EditorGUI.BeginDisabledGroup(desiredQueue == 0);
- offset = EditorGUILayout.IntField(offset, GUILayout.Width(64f));
- EditorGUI.EndDisabledGroup();
- GUILayout.EndHorizontal();
- if (GUI.changed) prop.intValue = mRenderQueueValues[desiredQueue] + offset;
- }
- serializedObject.ApplyModifiedProperties();
- base.OnInspectorGUI();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement