void OnGUI() { if (EditorPrefs.GetBool(AssetsDependenctGenerateEditor.ResourceDirty)) { EditorPrefs.SetBool(AssetsDependenctGenerateEditor.ResourceDirty, false); state = AssetDependenctTreeBuildState.Init; } switch (state) { case AssetDependenctTreeBuildState.Init: if (GUILayout.Button("生成资源图GUI")) { BuildAssetDependenctGraph(); } break; case AssetDependenctTreeBuildState.NodeGraph: DrawDependencyGUI(); break; default: break; } }
/// <summary> /// 构建资源关系图 /// </summary> public static void BuildAssetDependenctGraph() { var asset = BuildUtils.BuildAndSave(); var dic = new Dictionary <string, string[]>(); if (asset != null) { Debug.Log("This way can fast analysis resources relationship."); using (new ExecuteTimer("Compute cache file dependencies")) { var resourceDependenct = asset.data.GetDic(); var res = resourceDependenct.GetEnumerator(); while (res.MoveNext()) { dic.Add(res.Current.Key, res.Current.Value.dependencies); } } } else { Debug.Log("This way need some time analysis resources relationship."); string rpath = "Assets/Resources/"; using (new ExecuteTimer("Compute which file that need analysis")) { //var searchPattern = AssetFileType.GetSearchPattern(); //var filePaths = searchPattern.SelectMany(i => Directory.GetFiles(rpath, i, SearchOption.AllDirectories)).Distinct().ToArray(); //prefabfiles = filePaths; prefabfiles = AssetsDependenctGenerateEditor.GetAllFile(); } using (new ExecuteTimer("Compute Resource dependencies.")) { for (int i = 0; i < prefabfiles.Length; i++) { var assetPath = prefabfiles[i] = BuildUtils.GetUnityPath(prefabfiles[i]); var assetsDependencies = BuildUtils.GetDependencies(assetPath); assetsDependencies = BuildUtils.ExceptScriptAndDll(assetsDependencies); dic.Add(assetPath, assetsDependencies); } } } using (new ExecuteTimer("Compute Resouce Relationship" + dic.Count)) { //根据当前的资源引用关系数据,刷新构建图形数据结构 resourceGraph = new AssetDependenctGraph(dic); state = AssetDependenctTreeBuildState.NodeGraph; } }