private void GenerateJson()
            {
                AssetBundle.UnloadAllAssetBundles(true);
                DependenciesData[] datas = new DependenciesData[m_Paths.Count];
                for (int i = 0; i < m_Paths.Count; i++)
                {
                    if (!m_Paths[i].EndsWith(".json"))
                    {
                        AssetBundle mainfestAB = AssetBundle.LoadFromFile(m_Paths[i]);
                        var         mainfest   = mainfestAB.LoadAsset <AssetBundleManifest>("AssetBundleManifest");

                        datas[i] = DependenceUtility.Manifest2Dependence(mainfest);
                    }
                    else
                    {
                        string tempJson = System.IO.File.ReadAllText(m_Paths[i]);
                        datas[i] = JsonUtility.FromJson <DependenciesData>(tempJson);
                    }
                }

                string json = JsonUtility.ToJson(DependenceUtility.ConbineDependence(datas), true);

                File.WriteAllText(m_OutPutPath + "/depenencies.json", json);
                AssetDatabase.Refresh();

                Debug.Log("依赖文件已替换");
            }
Пример #2
0
            private DependenciesData BuildAssetBundle()
            {
                if (!Directory.Exists(m_OutPutPath))
                {
                    Directory.CreateDirectory(m_OutPutPath);
                }
                BuildPipeline.BuildAssetBundles(m_OutPutPath, m_Builds.ToArray(), m_buildAssetBundleOption, EditorUserBuildSettings.activeBuildTarget);
                AssetDatabase.Refresh();

                string      dependenctAb = Utility.Text.SplitPathName(m_OutPutPath)[1];
                AssetBundle mainfestAB   = AssetBundle.LoadFromFile(m_OutPutPath + "/" + dependenctAb);
                var         mainfest     = mainfestAB.LoadAsset <AssetBundleManifest>("AssetBundleManifest");
                var         dependence   = DependenceUtility.Manifest2Dependence(mainfest);

                return(dependence);
            }
Пример #3
0
            // 打包
            private void Build()
            {
                RefreshAssetBundleBuild();

                DependenciesData dependence;

                string jsonPath = m_OutPutPath + "/depenencies.json";

                // 增量打包时,融合原有依赖文件
                if (m_incrementalPackaging)
                {
                    if (File.Exists(jsonPath))
                    {
                        string           readJson        = File.ReadAllText(jsonPath);
                        DependenciesData oldDependencies = JsonUtility.FromJson <DependenciesData>(readJson);
                        DependenciesData newDependencies = BuildAssetBundle();
                        dependence = DependenceUtility.ConbineDependence(new DependenciesData[]
                        {
                            oldDependencies,
                            newDependencies
                        });
                    }
                    else
                    {
                        if (EditorUtility.DisplayDialog("提示", "输出路径中无依赖文件,无法进行增量打包,是否进行非增量打包", "确认", "取消"))
                        {
                            dependence = BuildAssetBundle();
                        }
                        else
                        {
                            return;
                        }
                    }
                }
                else
                {
                    dependence = BuildAssetBundle();
                }

                string json = JsonUtility.ToJson(dependence, true);

                File.WriteAllText(jsonPath, json);

                Debug.Log("BuildAssetBundles Complete");
            }
Пример #4
0
            public override void OnGUI()
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.Label("输出路径", GUILayout.Width(titleW));;
                        GUILayout.TextField(outPutPath, GUILayout.Width(textFieldW));

                        if (GUILayout.Button(EditorIcon.Folder))
                        {
                            string temp = EditorUtility.OpenFolderPanel("输出路径", Application.dataPath, "");

                            if (!string.IsNullOrEmpty(temp))
                            {
                                int index = temp.IndexOf("Assets");
                                outPutPath = temp;
                            }
                        }
                    }

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.Label("AB资源根目录", GUILayout.Width(titleW));;
                        GUILayout.TextField(abResPath, GUILayout.Width(textFieldW));

                        if (GUILayout.Button(EditorIcon.Folder))
                        {
                            string temp = EditorUtility.OpenFolderPanel("AB资源根目录", Application.dataPath, "");

                            if (!string.IsNullOrEmpty(temp))
                            {
                                int index = temp.IndexOf("Assets");
                                if (index == -1)
                                {
                                    Debug.LogError("选择的AB包文件夹必须在Assets文件夹下");
                                }
                                temp      = temp.Substring(index, temp.Length - index);
                                abResPath = temp;
                            }
                        }
                    }

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.Label("AB包相对路径", GUILayout.Width(titleW));
                        abRelaPath = GUILayout.TextField(abRelaPath, GUILayout.Width(textFieldW));
                    }

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.Label("是否打包AB", GUILayout.Width(titleW));
                        isBuildAB = EditorGUILayout.Toggle(isBuildAB);

                        GUILayout.Label("是否为Development", GUILayout.Width(titleW));
                        isDevelopment = EditorGUILayout.Toggle(isDevelopment);

                        List <AssetBundleBuild> builds = new List <AssetBundleBuild>();
                        if (GUILayout.Button("一键打包", GUILayout.Width(60)))
                        {
                            if (isBuildAB)
                            {
                                string abOutPath = outPutPath + "/" + abRelaPath;
                                if (!Directory.Exists(abOutPath))
                                {
                                    Directory.CreateDirectory(abOutPath);
                                }

                                DirectoryInfo abResInfo = new DirectoryInfo(Application.dataPath.Replace("Assets", "/") + abResPath);
                                builds = AssetBundleUtility.MarkDirectory(abResInfo, PackOption.AllDirectiony);

                                BuildPipeline.BuildAssetBundles(abOutPath, builds.ToArray(), BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);
                                AssetDatabase.Refresh();
                                Debug.Log("BuildAssetBundles Complete");

                                string      dependenctAb = Utility.Text.SplitPathName(abOutPath)[1];
                                AssetBundle mainfestAB   = AssetBundle.LoadFromFile(abOutPath + "/" + dependenctAb);
                                var         mainfest     = mainfestAB.LoadAsset <AssetBundleManifest>("AssetBundleManifest");
                                var         dependence   = DependenceUtility.Manifest2Dependence(mainfest);

                                string json = JsonUtility.ToJson(dependence, true);
                                File.WriteAllText(abOutPath + "/depenencies.json", json);
                            }

                            var buildScenes = EditorBuildSettings.scenes;

                            string exeName = Utility.Text.SplitPathName(System.Environment.CurrentDirectory)[1] + ".exe";


                            BuildOptions buildOptions = BuildOptions.None;

                            if (isDevelopment)
                            {
                                buildOptions |= BuildOptions.Development;
                            }

                            BuildPipeline.BuildPlayer(buildScenes, outPutPath + "/" + exeName, EditorUserBuildSettings.activeBuildTarget, buildOptions);
                            Application.OpenURL(outPutPath);
                            Debug.Log("Build Complete");
                        }
                    }
                }
            }