private void DrawAnalyzeButton() { if (!m_Analyzed) { EditorGUILayout.HelpBox("Please analyze first.", MessageType.Info); } if (GUILayout.Button("Analyze", GUILayout.Height(30f))) { m_Controller.Clear(); m_SelectedAssetIndex = -1; m_SelectedAssetName = null; m_SelectedDependencyData = new DependencyData(); m_SelectedScatteredAssetIndex = -1; m_SelectedScatteredAssetName = null; m_SelectedHostAssets = new Asset[] { }; if (m_Controller.Prepare()) { m_Controller.Analyze(); m_Analyzed = true; m_AssetCount = m_Controller.GetAssetNames().Length; m_ScatteredAssetCount = m_Controller.GetScatteredAssetNames().Length; m_CachedCircularDependencyDatas = m_Controller.GetCircularDependencyDatas(); m_CircularDependencyCount = m_CachedCircularDependencyDatas.Length; OnAssetsOrderOrFilterChanged(); OnScatteredAssetsOrderOrFilterChanged(); } else { EditorUtility.DisplayDialog("AssetBundle Analyze", "Can not parse 'AssetBundleCollection.xml', please use 'AssetBundle Editor' tool first.", "OK"); } } }
public bool BuildAssetBundles() { if (!IsValidOutputDirectory) { return(false); } //初始化版本文件信息 _initVersion(string.Format("{0}({1})", ApplicableGameVersion, InternalResourceVersion), MinAppVersion); Icarus.GameFramework.Utility.Zip.SetZipHelper(new DefaultZipHelper()); if (Directory.Exists(OutputPackagePath)) { Directory.Delete(OutputPackagePath, true); } Directory.CreateDirectory(OutputPackagePath); if (Directory.Exists(BuildReportPath)) { Directory.Delete(BuildReportPath, true); } Directory.CreateDirectory(BuildReportPath); if (Directory.Exists(OutputZipPath)) { Directory.Delete(OutputZipPath, true); } Directory.CreateDirectory(OutputZipPath); BuildAssetBundleOptions buildAssetBundleOptions = GetBuildAssetBundleOptions(); m_BuildReport.Initialize(BuildReportPath, ProductName, CompanyName, GameIdentifier, ApplicableGameVersion, InternalResourceVersion, UnityVersion, WindowsSelected, MacOSXSelected, IOSSelected, AndroidSelected, WindowsStoreSelected, RecordScatteredDependencyAssetsSelected, (int)buildAssetBundleOptions, m_AssetBundleDatas); try { m_BuildReport.LogInfo("Build Start Time: {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); if (m_BuildEventHandler != null) { m_BuildReport.LogInfo("Execute build event handler 'PreProcessBuildAll'..."); m_BuildEventHandler.PreProcessBuildAll( ProductName, CompanyName, GameIdentifier, ApplicableGameVersion, InternalResourceVersion, UnityVersion, buildAssetBundleOptions, OutputDirectory, WorkingPath, OutputPackagePath, OutputZipPath, BuildReportPath); } m_BuildReport.LogInfo("Start prepare AssetBundle collection..."); if (!m_AssetBundleCollection.Load()) { m_BuildReport.LogError("Can not parse 'AssetBundleCollection.xml', please use 'AssetBundle Editor' tool first."); m_BuildReport.SaveReport(); return(false); } m_BuildReport.LogInfo("Prepare AssetBundle collection complete."); m_BuildReport.LogInfo("Start analyze assets dependency..."); m_AssetBundleAnalyzerController.Analyze(); m_BuildReport.LogInfo("Analyze assets dependency complete."); m_BuildReport.LogInfo("Start prepare build map..."); AssetBundleBuild[] buildMap = GetBuildMap(); if (buildMap == null || buildMap.Length <= 0) { m_BuildReport.LogError("Build map is empty."); m_BuildReport.SaveReport(); return(false); } m_BuildReport.LogInfo("Prepare build map complete."); m_BuildReport.LogInfo("Start build AssetBundles for selected build targets..."); if (WindowsSelected) { BuildAssetBundles(buildMap, buildAssetBundleOptions, BuildTarget.StandaloneWindows); } if (MacOSXSelected) { #if UNITY_2017_3_OR_NEWER BuildTarget buildTarget = BuildTarget.StandaloneOSX; #else BuildTarget buildTarget = BuildTarget.StandaloneOSXUniversal; #endif BuildAssetBundles(buildMap, buildAssetBundleOptions, buildTarget); } if (IOSSelected) { BuildAssetBundles(buildMap, buildAssetBundleOptions, BuildTarget.iOS); } if (AndroidSelected) { BuildAssetBundles(buildMap, buildAssetBundleOptions, BuildTarget.Android); } if (WindowsStoreSelected) { BuildAssetBundles(buildMap, buildAssetBundleOptions, BuildTarget.WSAPlayer); } ProcessRecord(OutputDirectory); if (m_BuildEventHandler != null) { m_BuildReport.LogInfo("Execute build event handler 'PostProcessBuildAll'..."); m_BuildEventHandler.PostProcessBuildAll(ProductName, CompanyName, GameIdentifier, ApplicableGameVersion, InternalResourceVersion, UnityVersion, buildAssetBundleOptions, OutputDirectory, WorkingPath, OutputPackagePath, OutputZipPath, BuildReportPath); } m_BuildReport.LogInfo("Build AssetBundles for selected build targets complete."); m_BuildReport.SaveReport(); return(true); } catch (Exception exception) { m_BuildReport.LogError(exception.Message); m_BuildReport.SaveReport(); if (BuildAssetBundlesError != null) { BuildAssetBundlesError(exception.Message); } throw exception; return(false); } }