| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | using System;using System.Collections;using System.Reflection;using UnityEditor;using UnityEngine;namespace AIPagedLod{    [InitializeOnLoad]    public class EditorMonoBehaviour    {        static EditorMonoBehaviour()        {            var type = System.Reflection.Assembly.Load("UnityEditor.dll").GetType("UnityEditor.EditorAssemblies");            var method = type.GetMethod("SubclassesOf", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(Type) }, null);            var e = method.Invoke(null, new object[] { typeof(EditorMonoBehaviour) }) as IEnumerable;            foreach (Type editorMonoBehaviourClass in e)            {                method = editorMonoBehaviourClass.BaseType.GetMethod("OnEditorMonoBehaviour", BindingFlags.NonPublic | BindingFlags.Instance);                if (method != null)                {                    method.Invoke(System.Activator.CreateInstance(editorMonoBehaviourClass), new object[0]);                }            }        }        private void OnEditorMonoBehaviour()        {            EditorApplication.update += Update;            EditorApplication.hierarchyWindowChanged += OnHierarchyWindowChanged;            EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;            EditorApplication.projectWindowChanged += OnProjectWindowChanged;            EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGUI;            EditorApplication.modifierKeysChanged += OnModifierKeysChanged;            EditorApplication.CallbackFunction function = () => OnGlobalEventHandler(Event.current);            FieldInfo info = typeof(EditorApplication).GetField("globalEventHandler", BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic);            EditorApplication.CallbackFunction functions = (EditorApplication.CallbackFunction)info.GetValue(null);            function += function;            info.SetValue(null, (object)functions);            EditorApplication.searchChanged += OnSearchChanged;            Start();        }        public virtual void Start()        { }        public virtual void Update()        { }        public virtual void OnHierarchyWindowChanged()        { }        public virtual void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)        { }        public virtual void OnProjectWindowChanged()        { }        public virtual void ProjectWindowItemOnGUI(string guid, Rect selectionRect)        { }        public virtual void OnModifierKeysChanged()        { }        public virtual void OnGlobalEventHandler(Event e)        { }        public virtual void OnSearchChanged()        { }        public virtual void OnPlaymodeStateChanged(PlayModeState playModeState)        { }        public enum PlayModeState        {            Playing,            Paused,            Stop,            PlayingOrWillChangePlayMode        }    }}
 |