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("依赖文件已替换"); }
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); }
// 打包 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"); }
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"); } } } }