/// <summary> /// Finds all visible assets of the given type. /// </summary> public static List <T> AllVisibleAssetsOfType <T> () where T : ScriptableObject { List <T> result = new List <T> (); object filteredHierarchy = CreateFilteredHierarchy(); #if UNITY_3_5 UTInternalCall.Set(filteredHierarchy, "filter", typeof(T).Name); UTInternalCall.Set(filteredHierarchy, "searchMode", UTInternalCall.EnumValue("UnityEditor.FilteredHierarchy+SearchMode", "Type")); #else var searchFilter = UTInternalCall.InvokeStatic("UnityEditor.SearchableEditorWindow", "CreateFilter", typeof(T).Name, UTInternalCall.EnumValue("UnityEditor.SearchableEditorWindow+SearchMode", "Type")); UTInternalCall.Set(filteredHierarchy, "searchFilter", searchFilter); #endif var hierarchyProperty = UTInternalCall.InvokeStatic("UnityEditor.FilteredHierarchyProperty", "CreateHierarchyPropertyForFilter", filteredHierarchy); var emptyIntArray = new int[0]; while ((bool)UTInternalCall.Invoke(hierarchyProperty, "Next", emptyIntArray)) { var instanceId = (int)UTInternalCall.Get(hierarchyProperty, "instanceID"); var path = AssetDatabase.GetAssetPath(instanceId); T t = AssetDatabase.LoadAssetAtPath(path, typeof(T)) as T; if (t != null) { result.Add(t); } } return(result); }
private static object CreateFilteredHierarchy() { if (filteredHierarchy == null) { filteredHierarchy = UTInternalCall.CreateInstance("UnityEditor.FilteredHierarchy", HierarchyType.Assets); } UTInternalCall.Invoke(filteredHierarchy, "ResultsChanged"); return(filteredHierarchy); }