/// <summary>
 /// 收集资源
 /// </summary>
 /// <typeparam name="T">资源节点</typeparam>
 /// <param name="_searchInFolders">搜索目录</param>
 /// <param name="_filter">过滤</param>
 /// <param name="_dependencyClassify">依赖项分类</param>
 /// <param name="_funIslegal">是否合法</param>
 /// <param name="_funIsForceExclude">是否强制排除</param>
 /// <param name="_displayProgressBar">是否显示进度条</param>
 /// <returns>节点组</returns>
 public List <T> CollectAsset <T>(
     string[] _searchInFolders, string _filter, enEditorDependencyClassify _dependencyClassify,
     Func <T, bool> _funIslegal, Func <T, bool> _funIsForceExclude, bool _displayProgressBar)
     where T : EditorSelectionAsset
 {
     return(OnCollectAsset <T>(_searchInFolders, _filter, _dependencyClassify, _funIslegal, _funIsForceExclude, _displayProgressBar));
 }
 /// <summary>
 /// 收集资源
 /// </summary>
 /// <typeparam name="T">资源节点</typeparam>
 /// <param name="_searchInFolders">搜索目录</param>
 /// <param name="_filter">过滤</param>
 /// <param name="_dependencyClassify">依赖项分类</param>
 /// <param name="_funIslegal">是否合法</param>
 /// <param name="_funIsForceExclude">是否强制排除</param>
 /// <returns>节点组</returns>
 public List <T> CollectAsset <T>(
     string[] _searchInFolders, enEditorAssetFilterClassify _filter, enEditorDependencyClassify _dependencyClassify,
     Func <T, bool> _funIslegal, Func <T, bool> _funIsForceExclude)
     where T : EditorSelectionAsset
 {
     return(CollectAsset <T>(_searchInFolders, _filter, _dependencyClassify, _funIslegal, _funIsForceExclude, true));
 }
 /// <summary>
 /// 收集资源
 /// </summary>
 /// <typeparam name="T">资源节点</typeparam>
 /// <param name="_searchInFolders">搜索目录</param>
 /// <param name="_filter">过滤</param>
 /// <param name="_dependencyClassify">依赖项分类</param>
 /// <param name="_funIslegal">是否合法</param>
 /// <returns>节点组</returns>
 public List <T> CollectAsset <T>(
     string[] _searchInFolders, string _filter, enEditorDependencyClassify _dependencyClassify,
     Func <T, bool> _funIslegal)
     where T : EditorSelectionAsset
 {
     return(CollectAsset <T>(_searchInFolders, _filter, _dependencyClassify, _funIslegal, null));
 }
    /// <summary>
    /// 收集资源
    /// </summary>
    /// <typeparam name="T">资源节点</typeparam>
    /// <param name="_searchInFolders">搜索目录</param>
    /// <param name="_filter">过滤</param>
    /// <param name="_dependencyClassify">依赖项分类</param>
    /// <param name="_funIslegal">是否合法</param>
    /// <param name="_funIsForceExclude">是否强制排除</param>
    /// <param name="_displayProgressBar">是否显示进度条</param>
    /// <returns>节点组</returns>
    List <T> OnCollectAsset <T>(
        string[] _searchInFolders, string _filter, enEditorDependencyClassify _dependencyClassify,
        Func <T, bool> _funIslegal, Func <T, bool> _funIsForceExclude, bool _displayProgressBar)
        where T : EditorSelectionAsset
    {
        List <T> results = new List <T>();

        string[] arrPath = AssetDatabase.FindAssets(_filter, _searchInFolders);
        if (arrPath != null && arrPath.Length > 0)
        {
            bool          isForceExclude = false;
            bool          islegal        = false;
            List <string> lstNodePath    = new List <string>();
            string[]      arrDepPath     = null;
            T             node           = null;
            float         progress       = 0;
            Type          type           = typeof(T);
            for (int i = 0; i < arrPath.Length; i++)
            {
                arrPath[i] = AssetDatabase.GUIDToAssetPath(arrPath[i]);
                progress   = i + 1;
                if (_displayProgressBar)
                {
                    EditorUtility.DisplayProgressBar("CollectAsset=>" + type.Name, arrPath[i], progress / arrPath.Length);
                }

                if (_dependencyClassify == enEditorDependencyClassify.InClude)
                {
                    #region 收集依赖项
                    arrDepPath = AssetDatabase.GetDependencies(arrPath[i]);
                    if (arrDepPath != null && arrDepPath.Length > 0)
                    {
                        foreach (string p in arrDepPath)
                        {
                            if (!lstNodePath.Contains(p))
                            {
                                lstNodePath.Add(p);
                            }
                        }
                    }
                    #endregion
                }
                else if (!lstNodePath.Contains(arrPath[i]))
                {
                    lstNodePath.Add(arrPath[i]);
                }
            }

            progress = 0;
            for (int i = 0; i < lstNodePath.Count; i++)
            {
                progress = i + 1;
                if (_displayProgressBar)
                {
                    EditorUtility.DisplayProgressBar("Filter Asset=>" + type.Name, arrPath[i], progress / lstNodePath.Count);
                }
                if (File.Exists(lstNodePath[i]))
                {
                    node           = (T)Activator.CreateInstance(typeof(T), lstNodePath[i]);
                    islegal        = _funIslegal == null || (_funIslegal != null && _funIslegal(node));
                    isForceExclude = _funIsForceExclude != null && _funIsForceExclude(node);
                    if (islegal && !isForceExclude)
                    {
                        results.Add(node);
                    }
                }
            }
        }
        if (_displayProgressBar)
        {
            EditorUtility.ClearProgressBar();
        }
        return(results);
    }
 /// <summary>
 /// 收集资源
 /// </summary>
 /// <typeparam name="T">资源节点</typeparam>
 /// <param name="_searchInFolders">搜索目录</param>
 /// <param name="_filter">过滤</param>
 /// <param name="_dependencyClassify">依赖项分类</param>
 /// <param name="_displayProgressBar">是否显示进度条</param>
 /// <returns>节点组</returns>
 public List <T> CollectAsset <T>(
     string[] _searchInFolders, string _filter, enEditorDependencyClassify _dependencyClassify, bool _displayProgressBar)
     where T : EditorSelectionAsset
 {
     return(CollectAsset <T>(_searchInFolders, _filter, _dependencyClassify, null, null, _displayProgressBar));
 }
 /// <summary>
 /// 收集资源
 /// </summary>
 /// <typeparam name="T">资源节点</typeparam>
 /// <param name="_searchInFolders">搜索目录</param>
 /// <param name="_filter">过滤</param>
 /// <param name="_dependencyClassify">依赖项分类</param>
 /// <returns>节点组</returns>
 public List <T> CollectAsset <T>(
     string[] _searchInFolders, enEditorAssetFilterClassify _filter, enEditorDependencyClassify _dependencyClassify)
     where T : EditorSelectionAsset
 {
     return(CollectAsset <T>(_searchInFolders, OnResolveAssetFilter(_filter), _dependencyClassify, null, null));
 }
 /// <summary>
 /// 收集资源
 /// </summary>
 /// <typeparam name="T">资源节点</typeparam>
 /// <param name="_searchInFolders">搜索目录</param>
 /// <param name="_dependencyClassify">依赖项分类</param>
 /// <returns>节点组</returns>
 public List <T> CollectAsset <T>(
     string[] _searchInFolders, enEditorDependencyClassify _dependencyClassify)
     where T : EditorSelectionAsset
 {
     return(CollectAsset <T>(_searchInFolders, string.Empty, _dependencyClassify, null, null));
 }