2using System.Collections.Generic;
4using System.Reflection;
11 public static class EditorUtilities
13 public static IEnumerable<ReadonlyCacheEntry> GetTransformScanner()
15 RuntimeUnityEditorCore.Logger.Log(
LogLevel.Debug,
"Looking for Transforms...");
17 var trt = typeof(Transform);
18 var types = GetAllComponentTypes().Where(x => trt.IsAssignableFrom(x));
20 foreach (var component
in ScanComponentTypes(types,
false))
21 yield
return component;
24 public static IEnumerable<ReadonlyCacheEntry> GetRootGoScanner()
26 RuntimeUnityEditorCore.Logger.Log(
LogLevel.Debug,
"Looking for Root Game Objects...");
28 foreach (GameObject go
in Resources.FindObjectsOfTypeAll<GameObject>().Where(x => x.transform == x.transform.root))
32 public static IEnumerable<ReadonlyCacheEntry> GetMonoBehaviourScanner()
34 RuntimeUnityEditorCore.Logger.Log(
LogLevel.Debug,
"Looking for MonoBehaviours...");
36 var mbt = typeof(MonoBehaviour);
37 var types = GetAllComponentTypes().Where(x => mbt.IsAssignableFrom(x));
39 foreach (var component
in ScanComponentTypes(types,
true))
40 yield
return component;
43 public static IEnumerable<ReadonlyCacheEntry> GetComponentScanner()
45 RuntimeUnityEditorCore.Logger.Log(
LogLevel.Debug,
"Looking for Components...");
47 var mbt = typeof(MonoBehaviour);
48 var trt = typeof(Transform);
49 var allComps = GetAllComponentTypes().ToList();
50 var types = allComps.Where(x => !mbt.IsAssignableFrom(x) && !trt.IsAssignableFrom(x));
52 foreach (var component
in ScanComponentTypes(types,
true))
53 yield
return component;
56 private static IEnumerable<ReadonlyCacheEntry> ScanComponentTypes(IEnumerable<Type> types,
bool noTransfroms)
58 var allObjects = from type in types
60 from component in components
61 where !(noTransfroms && component is Transform)
64 foreach (var obj
in allObjects.Distinct())
66 string.Format(
"{0} ({1})", GetTransformPath(obj.transform), obj.GetType().Name), obj);
69 private static string GetTransformPath(Transform tr)
71 if (tr.parent !=
null)
return GetTransformPath(tr.parent) +
"/" + tr.name;
75 private static IEnumerable<Type> GetAllComponentTypes()
78 return AppDomain.CurrentDomain.GetAssemblies()
79 .SelectMany(Extensions.GetTypesSafe)
80 .Where(t => t.IsClass && !t.IsAbstract && !t.ContainsGenericParameters)
81 .Where(compType.IsAssignableFrom);
84 public static IEnumerable<ReadonlyCacheEntry> GetInstanceClassScanner()
86 RuntimeUnityEditorCore.Logger.Log(
LogLevel.Debug,
"Looking for class instances...");
88 var query = AppDomain.CurrentDomain.GetAssemblies()
89 .SelectMany(Extensions.GetTypesSafe)
90 .Where(t => t.IsClass && !t.IsAbstract && !t.ContainsGenericParameters);
92 foreach (var type
in query)
97 obj = type.GetProperty(
"Instance", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) ==
null ? type.GetProperty(
"Instance", BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(
null,
null) :
null;
101 RuntimeUnityEditorCore.Logger.Log(
LogLevel.Debug, ex.ToString());
UnityEngine.Component Component
RuntimeUnityEditor.Core.LogLevel LogLevel