Example #1
0
    /// <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);
    }
Example #2
0
 private static object CreateFilteredHierarchy()
 {
     if (filteredHierarchy == null)
     {
         filteredHierarchy = UTInternalCall.CreateInstance("UnityEditor.FilteredHierarchy", HierarchyType.Assets);
     }
     UTInternalCall.Invoke(filteredHierarchy, "ResultsChanged");
     return(filteredHierarchy);
 }