Advertisement
Bagserk

Batch SetRenderQueue Monobehavior

Apr 9th, 2018
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.89 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Reflection;
  7. using System;
  8.  
  9. public class RenderQueueSetting : EditorWindow {
  10.  
  11.    
  12.  
  13.     public int max = 3600;
  14.     bool orderToggle = false;
  15.     // Use this for initialization
  16.     [MenuItem("HoneySelect/SetRenderQueues")]
  17.     static void Init ()
  18.     {
  19.         RenderQueueSetting window = (RenderQueueSetting)EditorWindow.GetWindow(typeof(RenderQueueSetting));
  20.         window.Show();        
  21.     }
  22.    
  23.     // Update is called once per frame
  24.     void OnGUI() {
  25.         GUILayout.Label("Set Render Queues", EditorStyles.boldLabel);
  26.         max = EditorGUILayout.IntField("Max Render Queue", max);
  27.         orderToggle = EditorGUILayout.Toggle("Descending", orderToggle);
  28.         if (GUILayout.Button("Order"))
  29.             SetQueues(max, orderToggle);
  30.     }
  31.  
  32.     static void SetQueues(int maxqueue, bool order)
  33.     {
  34.         int maxv = maxqueue;
  35.         GameObject[] selObj = Selection.gameObjects;                
  36.  
  37.         foreach (var obj in Selection.gameObjects.OrderByWithDirection(go => go.name, order))
  38.         {
  39.             SetRenderQueue queueComp = obj.AddComponent<SetRenderQueue>();
  40.             System.Type ourType = queueComp.GetType();
  41.             FieldInfo fi = ourType.GetField("m_queues", BindingFlags.NonPublic | BindingFlags.Instance);
  42.             //Debug.Log(fi);
  43.             fi.SetValue(queueComp, new int[] { maxv });
  44.             maxv = maxv - 1;
  45.         }
  46.     }
  47.    
  48. }
  49.  
  50. public static class ExtensionMethods
  51. {
  52.     public static IOrderedEnumerable<TSource> OrderByWithDirection<TSource, TKey>
  53.         (this IEnumerable<TSource> source,
  54.          Func<TSource, TKey> keySelector,
  55.          bool descending)
  56.     {
  57.         return descending ? source.OrderByDescending(keySelector)
  58.                           : source.OrderBy(keySelector);
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement