void CreateAssetBundleCommand(string bundleName, string internalName, List <GUID> assets) { var abOp = new AssetBundleWriteOperation(); var fileObjects = m_WriteData.FileToObjects[internalName]; abOp.Command = CreateWriteCommand(internalName, fileObjects, m_PackingMethod); abOp.UsageSet = new BuildUsageTagSet(); m_WriteData.FileToUsageSet.Add(internalName, abOp.UsageSet); abOp.ReferenceMap = new BuildReferenceMap(); abOp.ReferenceMap.AddMappings(internalName, abOp.Command.serializeObjects.ToArray()); m_WriteData.FileToReferenceMap.Add(internalName, abOp.ReferenceMap); { abOp.Info = new AssetBundleInfo(); abOp.Info.bundleName = bundleName; abOp.Info.bundleAssets = assets.Select(x => m_DependencyData.AssetInfo[x]).ToList(); abOp.Info.bundleAssets.Sort(AssetLoadInfoCompare); foreach (var loadInfo in abOp.Info.bundleAssets) { loadInfo.address = m_BuildContent.Addresses[loadInfo.asset]; } } m_WriteData.WriteOperations.Add(abOp); }
public void OneTimeSetUp() { WriteOperations = new IWriteOperation[5]; WriteOperations[0] = new AssetBundleWriteOperation(); #pragma warning disable CS0618 // Type or member is obsolete WriteOperations[1] = new RawWriteOperation(); #pragma warning restore CS0618 // Type or member is obsolete WriteOperations[2] = new SceneBundleWriteOperation(); WriteOperations[3] = new SceneDataWriteOperation(); #pragma warning disable CS0618 // Type or member is obsolete WriteOperations[4] = new SceneRawWriteOperation(); #pragma warning restore CS0618 // Type or member is obsolete var command = new WriteCommand { fileName = GUID.Generate().ToString(), internalName = GUID.Generate().ToString() }; var usageSet = new BuildUsageTagSet(); var referenceMap = new BuildReferenceMap(); for (int i = 0; i < WriteOperations.Length; i++) { WriteOperations[i].Command = command; WriteOperations[i].UsageSet = usageSet; WriteOperations[i].ReferenceMap = referenceMap; } }
private IWriteOperation CreateAssetBundleWriteOperation(string bundleName, List <GUID> assets, BuildDependencyInfo buildInfo) { var dependencies = new HashSet <string>(); var serializeObjects = new HashSet <ObjectIdentifier>(); var op = new AssetBundleWriteOperation(); op.command.fileName = GenerateInternalFileName(bundleName); op.command.internalName = string.Format("archive:/{0}/{0}", op.command.fileName); op.info.bundleName = bundleName; op.info.bundleAssets = new List <AssetLoadInfo>(); foreach (var asset in assets) { AssetLoadInfo assetInfo; if (!buildInfo.assetInfo.TryGetValue(asset, out assetInfo)) { BuildLogger.LogWarning("Could not find info for asset '{0}'.", asset); continue; } op.info.bundleAssets.Add(assetInfo); dependencies.UnionWith(buildInfo.assetToBundles[asset]); serializeObjects.UnionWith(assetInfo.includedObjects); foreach (var reference in assetInfo.referencedObjects) { if (reference.filePath == kUnityDefaultResourcePath) { continue; } if (buildInfo.assetInfo.ContainsKey(reference.guid)) { continue; } serializeObjects.Add(reference); } } dependencies.Remove(bundleName); // Don't include self as dependency op.info.bundleDependencies = dependencies.OrderBy(x => x).ToList(); op.command.dependencies = op.info.bundleDependencies.Select(x => string.Format("archive:/{0}/{0}", GenerateInternalFileName(x))).ToList(); op.command.serializeObjects = serializeObjects.Select(x => new SerializationInfo { serializationObject = x, serializationIndex = SerializationIndexFromObjectIdentifier(x) }).ToList(); return(op); }
void CreateAssetBundleCommand(string bundleName, string internalName, List <GUID> assets) { var command = CreateWriteCommand(internalName, m_WriteData.FileToObjects[internalName], m_PackingMethod); var usageSet = new BuildUsageTagSet(); var referenceMap = new BuildReferenceMap(); var dependencyHashes = new List <Hash128>(); var bundleAssets = new List <AssetLoadInfo>(); referenceMap.AddMappings(command.internalName, command.serializeObjects.ToArray()); foreach (var asset in assets) { usageSet.UnionWith(m_DependencyData.AssetUsage[asset]); if (m_DependencyData.DependencyHash.TryGetValue(asset, out var hash)) { dependencyHashes.Add(hash); } AssetLoadInfo assetInfo = m_DependencyData.AssetInfo[asset]; assetInfo.address = m_BuildContent.Addresses[asset]; bundleAssets.Add(assetInfo); } bundleAssets.Sort(AssetLoadInfoCompare); var operation = new AssetBundleWriteOperation(); operation.Command = command; operation.UsageSet = usageSet; operation.ReferenceMap = referenceMap; operation.DependencyHash = !dependencyHashes.IsNullOrEmpty() ? HashingMethods.Calculate(dependencyHashes).ToHash128() : new Hash128(); operation.Info = new AssetBundleInfo(); operation.Info.bundleName = bundleName; operation.Info.bundleAssets = bundleAssets; m_WriteData.WriteOperations.Add(operation); m_WriteData.FileToUsageSet.Add(command.internalName, usageSet); m_WriteData.FileToReferenceMap.Add(command.internalName, referenceMap); }
/// <summary> /// This callback is what remove the unwanted AssetBundle writing operation from being processed with the WriteSerializedFiles /// and ArchiveAndCompressBundles taskes /// </summary> /// <param name="buildParams"></param> /// <param name="dependencyData"></param> /// <param name="writeData"></param> /// <returns></returns> private static ReturnCode PostPackingCallback(IBuildParameters buildParams, IDependencyData dependencyData, IWriteData writeData) { if (includedBundles != null && includedBundles.Count > 0) { for (int i = writeData.WriteOperations.Count - 1; i >= 0; --i) { // get the AssetBundle name that the writeOperation is for AssetBundleWriteOperation op = writeData.WriteOperations[i] as AssetBundleWriteOperation; string bundleName = null; if (op != null) { bundleName = op.Info.bundleName; } else { // scene bundles are also different if (writeData.WriteOperations[i] is SceneBundleWriteOperation s_op) { bundleName = s_op.Info.bundleName; } else { Debug.LogError("Unexpected write operation"); return(ReturnCode.Error); } } // if we do not want to build that bundle, remove the write operation from the list if (includedBundles.Contains(bundleName) == false) { writeData.WriteOperations.RemoveAt(i); } } } return(ReturnCode.Success); }