static void SetupAssetdatabaseUsage() { s_EditorBuildSettings = AssetbundleBuildSettings.EditorInstance; if (s_EditorBuildSettings == null || !s_EditorBuildSettings.IsValid()) { throw new System.Exception("AssetbundleBuildSetting is not valid"); } if (s_EditorBuildSettings.CleanCacheInEditor) { Caching.ClearCache(); } UseAssetDatabase = !s_EditorBuildSettings.EmulateInEditor; if (UseAssetDatabase) { var assetPath = new List <string>(); var loadPath = new List <string>(); foreach (var setting in s_EditorBuildSettings.BundleSettings) { assetPath.Clear(); loadPath.Clear(); var folderPath = UnityEditor.AssetDatabase.GUIDToAssetPath(setting.Folder.guid); var dir = new DirectoryInfo(Path.Combine(Application.dataPath, folderPath.Remove(0, 7))); AssetbundleBuildSettings.GetFilesInDirectory(string.Empty, assetPath, loadPath, dir, setting.IncludeSubfolder); var assetList = new Dictionary <string, List <string> >(); for (int i = 0; i < assetPath.Count; i++) { if (assetList.TryGetValue(loadPath[i], out var list)) { list.Add(assetPath[i]); continue; } assetList.Add(loadPath[i], new List <string>() { assetPath[i] }); } s_AssetListForEditor.Add(setting.BundleName, assetList); } } }
public static void BuildAssetBundles(AssetbundleBuildSettings settings, BuildType buildType) { var bundleList = new List <AssetBundleBuild>(); foreach (var setting in settings.BundleSettings) { var folderPath = AssetDatabase.GUIDToAssetPath(setting.Folder.guid); var dir = new DirectoryInfo(Path.Combine(Application.dataPath, folderPath.Remove(0, 7))); if (!dir.Exists) { throw new Exception($"Could not found Path {folderPath} for {setting.BundleName}"); } var assetPathes = new List <string>(); var loadPathes = new List <string>(); AssetbundleBuildSettings.GetFilesInDirectory(string.Empty, assetPathes, loadPathes, dir, setting.IncludeSubfolder); if (assetPathes.Count == 0) { Debug.LogWarning($"Could not found Any Assets {folderPath} for {setting.BundleName}"); } var newBundle = new AssetBundleBuild(); newBundle.assetBundleName = setting.BundleName; newBundle.assetNames = assetPathes.ToArray(); newBundle.addressableNames = loadPathes.ToArray(); bundleList.Add(newBundle); } var buildTarget = EditorUserBuildSettings.activeBuildTarget; var groupTarget = BuildPipeline.GetBuildTargetGroup(buildTarget); var outputPath = Path.Combine(buildType == BuildType.Local ? settings.LocalOutputPath : settings.RemoteOutputPath, buildTarget.ToString()); var buildParams = new CustomBuildParameters(settings, buildTarget, groupTarget, outputPath, buildType == BuildType.Local); buildParams.UseCache = !settings.ForceRebuild; if (buildParams.UseCache && settings.UseCacheServer) { buildParams.CacheServerHost = settings.CacheServerHost; buildParams.CacheServerPort = settings.CacheServerPort; } s_CurrentBuildingSettings = settings; s_CurrentBuildType = buildType; ContentPipeline.BuildCallbacks.PostPackingCallback += PostPackingForSelectiveBuild; var returnCode = ContentPipeline.BuildAssetBundles(buildParams, new BundleBuildContent(bundleList.ToArray()), out var results); ContentPipeline.BuildCallbacks.PostPackingCallback -= PostPackingForSelectiveBuild; if (buildType == BuildType.Dry) { EditorUtility.DisplayDialog("Build Succeeded!", "Dry bundle build succeeded!", "Confirm"); return; } if (returnCode == ReturnCode.Success) { WriteManifestFile(outputPath, results, buildTarget, settings.RemoteURL); WriteLogFile(outputPath, results); //only remote bundle build generates link.xml switch (buildType) { case BuildType.Local: EditorUtility.DisplayDialog("Build Succeeded!", "Local bundle build succeeded!", "Confirm"); break; case BuildType.Remote: var linkPath = TypeLinkerGenerator.Generate(settings, results); EditorUtility.DisplayDialog("Build Succeeded!", $"Remote bundle build succeeded, \n {linkPath} updated!", "Confirm"); break; case BuildType.Dry: EditorUtility.DisplayDialog("Build Succeeded!", $"Dry bundle build succeeded", "Confirm"); break; } } else { EditorUtility.DisplayDialog("Build Failed!", $"Bundle build failed, \n Code : {returnCode}", "Confirm"); Debug.LogError(returnCode); } }