Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        /// <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;
            }
        }