public static void BuildAssetBundles(AssetbundleBuildSettings settings, BuildType buildType) { if (!Application.isBatchMode) { //have to ask save current scene var saved = UnityEditor.SceneManagement.EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo(); if (!saved) { EditorUtility.DisplayDialog("Build Failed!", $"User Canceled", "Confirm"); return; } } var bundleList = GetAssetBundlesList(settings); var buildTarget = EditorUserBuildSettings.activeBuildTarget; var groupTarget = BuildPipeline.GetBuildTargetGroup(buildTarget); var outputPath = Utility.CombinePath(buildType == BuildType.Local ? settings.LocalOutputPath : settings.RemoteOutputPath, buildTarget.ToString()); //generate sharedBundle if needed, and pre generate dependency var treeResult = AssetDependencyTree.ProcessDependencyTree(bundleList); if (settings.AutoCreateSharedBundles) { bundleList.AddRange(treeResult.SharedBundles); } var buildParams = new CustomBuildParameters(settings, buildTarget, groupTarget, outputPath, treeResult.BundleDependencies, buildType); buildParams.UseCache = !settings.ForceRebuild; if (buildParams.UseCache && settings.UseCacheServer) { buildParams.CacheServerHost = settings.CacheServerHost; buildParams.CacheServerPort = settings.CacheServerPort; } ContentPipeline.BuildCallbacks.PostPackingCallback += PostPackingForSelectiveBuild; var returnCode = ContentPipeline.BuildAssetBundles(buildParams, new BundleBuildContent(bundleList.ToArray()), out var results); ContentPipeline.BuildCallbacks.PostPackingCallback -= PostPackingForSelectiveBuild; if (returnCode == ReturnCode.Success) { //only remote bundle build generates link.xml switch (buildType) { case BuildType.Local: WriteManifestFile(outputPath, results, buildTarget, settings.RemoteURL); WriteLogFile(outputPath, results); if (!Application.isBatchMode) { EditorUtility.DisplayDialog("Build Succeeded!", "Local bundle build succeeded!", "Confirm"); } break; case BuildType.Remote: WriteManifestFile(outputPath, results, buildTarget, settings.RemoteURL); WriteLogFile(outputPath, results); var linkPath = TypeLinkerGenerator.Generate(settings, results); if (!Application.isBatchMode) { EditorUtility.DisplayDialog("Build Succeeded!", $"Remote bundle build succeeded, \n {linkPath} updated!", "Confirm"); } if (settings.AutoUploadS3) { LocusAssetbundleUploaderExtension.UploadToS3Bucket(settings); } break; } } else { EditorUtility.DisplayDialog("Build Failed!", $"Bundle build failed, \n Code : {returnCode}", "Confirm"); Debug.LogError(returnCode); } }
public override void OnInspectorGUI() { serializedObject.Update(); var settings = target as AssetbundleBuildSettings; list.DoLayoutList(); bool allowBuild = true; if (!settings.IsValid()) { GUILayout.Label("Duplicate or Empty BundleName detected"); allowBuild = false; } GUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(m_AutoCreateSharedBundles); if (allowBuild && GUILayout.Button("Get Expected Sharedbundle List")) { AssetbundleBuilder.WriteExpectedSharedBundles(settings); GUIUtility.ExitGUI(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(m_RemoteOutputPath); if (GUILayout.Button("Open", GUILayout.ExpandWidth(false))) { EditorUtility.RevealInFinder(Utility.CombinePath(settings.RemoteOutputPath, EditorUserBuildSettings.activeBuildTarget.ToString())); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(m_LocalOutputPath); if (GUILayout.Button("Open", GUILayout.ExpandWidth(false))) { EditorUtility.RevealInFinder(Utility.CombinePath(settings.LocalOutputPath, EditorUserBuildSettings.activeBuildTarget.ToString())); } GUILayout.EndHorizontal(); EditorGUILayout.PropertyField(m_RemoteURL); EditorGUILayout.Space(); EditorGUILayout.PropertyField(m_EmulateBundle); EditorGUILayout.PropertyField(m_EmulateUseRemoteFolder); EditorGUILayout.PropertyField(m_CleanCache); EditorGUILayout.PropertyField(m_ForceRebuld); EditorGUILayout.Space(); EditorGUILayout.PropertyField(m_AutoUploadS3); EditorGUILayout.Space(); EditorGUILayout.PropertyField(m_UseCacheServer); if (m_UseCacheServer.boolValue) { EditorGUILayout.PropertyField(m_CacheServerHost); EditorGUILayout.PropertyField(m_CacheServerPort); } EditorGUILayout.Space(); EditorGUILayout.PropertyField(m_UseFtp); EditorGUILayout.Space(); if (m_UseFtp.boolValue) { EditorGUILayout.PropertyField(m_FtpHost); EditorGUILayout.PropertyField(m_FtpUser); m_FtpPass.stringValue = EditorGUILayout.PasswordField("Ftp Password", m_FtpPass.stringValue); } GUILayout.Label($"Local Output folder : { settings.LocalOutputPath }"); GUILayout.Label($"Remote Output folder : { settings.RemoteOutputPath }"); serializedObject.ApplyModifiedProperties(); EditorGUI.BeginDisabledGroup(Application.isPlaying); if (AssetbundleBuildSettings.EditorInstance == settings) { EditorGUILayout.BeginHorizontal(); if (allowBuild && GUILayout.Button("Build Remote")) { AssetbundleBuilder.BuildAssetBundles(settings, BuildType.Remote); GUIUtility.ExitGUI(); } if (allowBuild && GUILayout.Button("Build Local")) { AssetbundleBuilder.BuildAssetBundles(settings, BuildType.Local); GUIUtility.ExitGUI(); } EditorGUI.BeginDisabledGroup(!settings.UseFtp); if (allowBuild && GUILayout.Button("Upload(FTP)")) { AssetbundleUploader.UploadAllRemoteFiles(settings); GUIUtility.ExitGUI(); } EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(); if (GUILayout.Button("Upload to S3")) { LocusAssetbundleUploaderExtension.UploadToS3Bucket(settings); GUIUtility.ExitGUI(); } EditorGUILayout.EndVertical(); } else { if (GUILayout.Button("Set as active setting")) { AssetbundleBuildSettings.EditorInstance = settings; } } EditorGUI.EndDisabledGroup(); serializedObject.ApplyModifiedProperties(); }