public static AssetDetailConfig CreateAssetDetailConfig(PackerData packerData) { List <AssetDetail> details = new List <AssetDetail>(); foreach (var group in packerData.groupDatas) { foreach (var bundle in group.bundleDatas) { foreach (var asset in bundle.assetDatas) { if (asset.IsMainAsset) { AssetDetail detail = new AssetDetail() { Address = asset.Address, Path = asset.Path, Bundle = bundle.Path, IsScene = asset.IsScene, Labels = asset.Labels, }; details.Add(detail); } } } } AssetDetailConfig detailConfig = new AssetDetailConfig(); detailConfig.Details = details.ToArray(); return(detailConfig); }
private static CompatibilityAssetBundleManifest PackAssetBundle(PackerData packerData, BundleBuildData buildData, string outputDir) { List <AssetBundleBuild> bundleBuilds = new List <AssetBundleBuild>(); foreach (var group in packerData.groupDatas) { foreach (var bundle in group.bundleDatas) { AssetBundleBuild build = new AssetBundleBuild(); build.assetBundleName = bundle.Path; build.assetNames = (from asset in bundle.assetDatas select asset.Path).ToArray(); bundleBuilds.Add(build); } } var manifest = CompatibilityBuildPipeline.BuildAssetBundles(outputDir, bundleBuilds.ToArray(), buildData.GetBundleOptions(), buildData.GetBuildTarget()); return(manifest); }
public static PackerData GetPackerData() { AssetGroupCreater[] groups = AssetDatabaseUtility.FindInstances <AssetGroupCreater>(); List <AssetResult> results = new List <AssetResult>(); foreach (var group in groups) { results.AddRange(group.GetResults()); } PackerData packerData = new PackerData(); var groupNames = results.GroupBy((result) => result.GroupName).ToList(); foreach (var gn in groupNames) { PackerGroupData groupData = new PackerGroupData(); groupData.Name = gn.Key; packerData.groupDatas.Add(groupData); var bundleNames = gn.GroupBy((result) => result.Bundle).ToList(); foreach (var bn in bundleNames) { PackerBundleData bundleData = new PackerBundleData(); bundleData.Path = bn.Key; groupData.bundleDatas.Add(bundleData); foreach (var ad in bn) { PackerAssetData assetData = new PackerAssetData(); assetData.Address = ad.Address; assetData.Path = ad.Path; assetData.IsMainAsset = ad.IsMainAsset; assetData.IsScene = ad.IsScene; assetData.Labels = ad.Labels; bundleData.assetDatas.Add(assetData); } } } return(packerData); }
//private Dictionary<string, List<PackerBundleData>> addressRepeatDataDic = new Dictionary<string, List<PackerBundleData>>(); private void OnEnable() { packerData = AssetPackerUtil.GetPackerData(); //foreach(var group in assetPackerConfig.groupDatas) //{ // foreach(var data in group.assetFiles) // { // if(!addressRepeatDataDic.TryGetValue(data.Address,out List<PackerBundleData> dataList)) // { // dataList = new List<PackerBundleData>(); // addressRepeatDataDic.Add(data.Address, dataList); // } // dataList.Add(data); // } //} if (PlayerSettingsUtility.HasScriptingDefineSymbol(ASSET_BUNDLE_SYMBOL)) { runMode = RunMode.AssetBundle; } }
public static void BuildAssetBundles(PackerData packerData, BundleBuildData buildData) { string outputDir = buildData.OutputDir; if (string.IsNullOrEmpty(outputDir)) { Debug.LogError("The outputDir is empty"); return; } if (Directory.Exists(outputDir) && buildData.CleanupBeforeBuild) { Directory.Delete(outputDir, true); } if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } var manifest = PackAssetBundle(packerData, buildData, outputDir); if (manifest == null) { Debug.LogError("PackAssetBundle Failed"); return; } var assetDetailConfig = CreateAssetDetailConfig(packerData); string assetDetailConfigFilePath = $"{outputDir}/{AssetConst.GetAssetDetailConfigFileName()}"; JSONWriter.WriteToFile <AssetDetailConfig>(assetDetailConfig, assetDetailConfigFilePath); var bundleDetailConfig = CreateBundleDetailConfig(manifest); string bundleDetailConfigFilePath = $"{outputDir}/{AssetConst.GetBundleDetailConfigFileName()}"; JSONWriter.WriteToFile <BundleDetailConfig>(bundleDetailConfig, bundleDetailConfigFilePath); }