IEnumerator ParseAssetBundle(AssetTreeModel <AssetTreeData> dataModel, Dictionary <string, string[]> assetbundleDictionary, int total) { //create root AssetTreeData rootData = new AssetTreeData(); rootData.Id = AssetTreeManager.mIns.GetUniqueId(); dataModel.Root = rootData; dataModel.Add(ref rootData); //Editor Ui int progress = 0; float totalprogress = total + 2; yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Start Parseing", 0f)); foreach (var assetbundleinfo in assetbundleDictionary) { var assetbundlename = assetbundleinfo.Key; var assetpaths = assetbundleinfo.Value; if (assetpaths.Length > 0) { AssetTreeData folderData = CreateBaseAssetBundle(assetpaths, assetbundlename, dataModel); folderData.IsAssetBundleViewData = true; foreach (var assetpath in assetpaths) { CreateSubAssetBundle(dataModel, folderData.Id, assetpath, assetbundlename); //Editor Ui progress++; if (progress % AssetWindowConfig.ParseStep == 0) { yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Parseing " + assetpath, progress / totalprogress)); } } } } yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Set Dependency", (progress + 1) / totalprogress)); List <AssetTreeData> nonamelist = new List <AssetTreeData>(); Stack <AssetTreeData> itemStack = StackPool <AssetTreeData> .Get(); var allTreeDatas = dataModel.GetAllItems(); //set dependency references for (int i = 0; i < allTreeDatas.Count; i++) { var info = allTreeDatas[i]; itemStack.Push(info); //SetAssetDependRef(ref info,dataModel,nonamelist); } ListPool <AssetTreeData> .Release(allTreeDatas); yield return(SetAssetDependRef(itemStack, dataModel, nonamelist)); StackPool <AssetTreeData> .Release(itemStack); yield return(DisplayProgressBar("Asset-Parse AssetBundle", "Assigning NoAssetName", 1f)); for (int i = 0; i < nonamelist.Count; i++) { var nonameitem = nonamelist[i]; var deplist = dataModel.GetDependParents(nonameitem.FilePath); for (int j = 0; j < deplist.Count; j++) { var dep = deplist[j]; if (j == 0) { dataModel.AddChild(dep.Id, nonameitem.Id); } else { nonameitem.Id = AssetTreeManager.mIns.GetUniqueId(); dataModel.Add(ref nonameitem); //dataModel.AddViewData(ref nonameitem); dataModel.AddChild(dep.Id, nonameitem.Id); } } } yield return(null); EditorUtility.ClearProgressBar(); }