Advertisement
Muk99

EditorEffects

Aug 30th, 2015
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.21 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using UnityEditor;
  3. using UnityEngine;
  4. using UnityStandardAssets.ImageEffects;
  5.  
  6. public static class EditorEffects {
  7.  
  8.     private static bool enable {
  9.         get {
  10.             return EditorPrefs.GetBool("EffectsEnabled", true);
  11.         }
  12.         set {
  13.             EditorPrefs.SetBool("EffectsEnabled", value);
  14.         }
  15.     }
  16.  
  17.     [MenuItem("Edit/Editor Effects #e", false, 0)]
  18.     private static void EnableDisable() {
  19.  
  20.         enable = !enable;
  21.  
  22.         if(!enable)
  23.             foreach(SceneView view in SceneView.sceneViews)
  24.                 foreach(var effect in view.camera.GetComponents<PostEffectsBase>())
  25.                     GameObject.DestroyImmediate(effect);
  26.  
  27.         SceneView.RepaintAll();
  28.     }
  29.  
  30.     [InitializeOnLoadMethod]
  31.     private static void Init() {
  32.         SceneView.onSceneGUIDelegate += (view) => {
  33.             if(!view.camera)
  34.                 return;
  35.  
  36.             if(!enable || !Camera.main || !Camera.main.isActiveAndEnabled) {
  37.                 RemoveEffects(view.camera);
  38.                 RemovePostEffects(view.camera);
  39.                 return;
  40.             }
  41.  
  42.             SyncEffects(Camera.main, view.camera);
  43.             SyncPostEffects(Camera.main, view.camera);
  44.         };
  45.     }
  46.  
  47.     private static void RemoveEffects(Camera cam) {
  48.         foreach(var comp in cam.GetComponents<ImageEffectBase>())
  49.             if(comp)
  50.                 GameObject.DestroyImmediate(comp, false);
  51.     }
  52.  
  53.     private static void SyncEffects(Camera source, Camera dest) {
  54.         var sourceEffects = new List<ImageEffectBase>();
  55.         source.GetComponents<ImageEffectBase>(sourceEffects);
  56.  
  57.         Component destEffect;
  58.         foreach(var sourceEffect in sourceEffects)
  59.             if(sourceEffect) {
  60.                 destEffect = dest.GetComponent(sourceEffect.GetType());
  61.                 if(!destEffect)
  62.                     destEffect = dest.gameObject.AddComponent(sourceEffect.GetType());
  63.                 EditorUtility.CopySerialized(sourceEffect, destEffect);
  64.             }
  65.  
  66.         foreach(var comp in dest.GetComponents<ImageEffectBase>())
  67.             if(!comp || !source.GetComponent(comp.GetType()))
  68.                 GameObject.DestroyImmediate(comp, false);
  69.     }
  70.  
  71.     private static void RemovePostEffects(Camera cam) {
  72.         foreach(var comp in cam.GetComponents<PostEffectsBase>())
  73.             if(comp)
  74.                 GameObject.DestroyImmediate(comp, false);
  75.     }
  76.  
  77.     private static void SyncPostEffects(Camera source, Camera dest) {
  78.         var sourceEffects = new List<PostEffectsBase>();
  79.         source.GetComponents<PostEffectsBase>(sourceEffects);
  80.  
  81.         Component destEffect;
  82.         foreach(var sourceEffect in sourceEffects)
  83.             if(sourceEffect) {
  84.                 destEffect = dest.GetComponent(sourceEffect.GetType());
  85.                 if(!destEffect)
  86.                     destEffect = dest.gameObject.AddComponent(sourceEffect.GetType());
  87.                 EditorUtility.CopySerialized(sourceEffect, destEffect);
  88.             }
  89.  
  90.         foreach(var comp in dest.GetComponents<PostEffectsBase>())
  91.             if(!comp || !source.GetComponent(comp.GetType()))
  92.                 GameObject.DestroyImmediate(comp, false);
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement