EditorMonoBehaviour.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using System;
  2. using System.Collections;
  3. using System.Reflection;
  4. using UnityEditor;
  5. using UnityEngine;
  6. namespace AIPagedLod
  7. {
  8. [InitializeOnLoad]
  9. public class EditorMonoBehaviour
  10. {
  11. static EditorMonoBehaviour()
  12. {
  13. var type = System.Reflection.Assembly.Load("UnityEditor.dll").GetType("UnityEditor.EditorAssemblies");
  14. var method = type.GetMethod("SubclassesOf", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(Type) }, null);
  15. var e = method.Invoke(null, new object[] { typeof(EditorMonoBehaviour) }) as IEnumerable;
  16. foreach (Type editorMonoBehaviourClass in e)
  17. {
  18. method = editorMonoBehaviourClass.BaseType.GetMethod("OnEditorMonoBehaviour", BindingFlags.NonPublic | BindingFlags.Instance);
  19. if (method != null)
  20. {
  21. method.Invoke(System.Activator.CreateInstance(editorMonoBehaviourClass), new object[0]);
  22. }
  23. }
  24. }
  25. private void OnEditorMonoBehaviour()
  26. {
  27. EditorApplication.update += Update;
  28. EditorApplication.hierarchyWindowChanged += OnHierarchyWindowChanged;
  29. EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
  30. EditorApplication.projectWindowChanged += OnProjectWindowChanged;
  31. EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGUI;
  32. EditorApplication.modifierKeysChanged += OnModifierKeysChanged;
  33. EditorApplication.CallbackFunction function = () => OnGlobalEventHandler(Event.current);
  34. FieldInfo info = typeof(EditorApplication).GetField("globalEventHandler", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);
  35. EditorApplication.CallbackFunction functions = (EditorApplication.CallbackFunction)info.GetValue(null);
  36. function += function;
  37. info.SetValue(null, (object)functions);
  38. EditorApplication.searchChanged += OnSearchChanged;
  39. Start();
  40. }
  41. public virtual void Start()
  42. { }
  43. public virtual void Update()
  44. { }
  45. public virtual void OnHierarchyWindowChanged()
  46. { }
  47. public virtual void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
  48. { }
  49. public virtual void OnProjectWindowChanged()
  50. { }
  51. public virtual void ProjectWindowItemOnGUI(string guid, Rect selectionRect)
  52. { }
  53. public virtual void OnModifierKeysChanged()
  54. { }
  55. public virtual void OnGlobalEventHandler(Event e)
  56. { }
  57. public virtual void OnSearchChanged()
  58. { }
  59. public virtual void OnPlaymodeStateChanged(PlayModeState playModeState)
  60. { }
  61. public enum PlayModeState
  62. {
  63. Playing,
  64. Paused,
  65. Stop,
  66. PlayingOrWillChangePlayMode
  67. }
  68. }
  69. }