//todo 修改的函数 private void ProcessPackageList(string outputPackagePath, BuildTarget buildTarget) { _assetBundleAssetPaths.Clear(); byte[] encryptBytes = new byte[4]; Icarus.GameFramework.Utility.Random.GetRandomBytes(encryptBytes); if (m_AssetBundleDatas.Count > ushort.MaxValue) { throw new GameFrameworkException("Package list can only contains 65535 resources in version 0."); } foreach (AssetBundleData assetBundleData in m_AssetBundleDatas.Values) { var abName = assetBundleData.Name.Split('/').Last(); _assetBundleAssetPaths.Add(abName, new List <string>()); string AbpackageListPath = Icarus.GameFramework.Utility.Path.GetCombinePath(outputPackagePath, string.Format("{0}_{1}~{2}", abName, assetBundleData.Variant, VersionListFileName)); using (FileStream fileStream = new FileStream(AbpackageListPath, FileMode.CreateNew, FileAccess.Write)) { using (BinaryWriter binaryWriter = new BinaryWriter(fileStream)) { binaryWriter.Write(PackageListHeader); binaryWriter.Write(PackageListVersion); binaryWriter.Write(encryptBytes); byte[] applicableGameVersionBytes = GetXorBytes(Icarus.GameFramework.Utility.Converter.GetBytes(ApplicableGameVersion), encryptBytes); binaryWriter.Write((byte)applicableGameVersionBytes.Length); binaryWriter.Write(applicableGameVersionBytes); binaryWriter.Write(InternalResourceVersion); if (m_AssetBundleDatas.Count > ushort.MaxValue) { throw new GameFrameworkException("Package list can only contains 65535 resources in version 0."); } _writerStr(encryptBytes, assetBundleData.Name, "AssetBundle name", binaryWriter); _writerStr(encryptBytes, assetBundleData.GroupTag, "Group Tag", binaryWriter, false); if (assetBundleData.Variant == null) { binaryWriter.Write((byte)0); } else { _writerStr(encryptBytes, assetBundleData.Variant, "AssetBundle variant", binaryWriter); } binaryWriter.Write((byte)assetBundleData.LoadType); AssetBundleCode assetBundleCode = assetBundleData.GetCode(buildTarget); binaryWriter.Write(assetBundleCode.Length); binaryWriter.Write(assetBundleCode.HashCode); string[] assetNames = assetBundleData.GetAssetNames(); binaryWriter.Write(assetNames.Length); foreach (string assetName in assetNames) { _writerStr(Icarus.GameFramework.Utility.Converter.GetBytes(assetBundleCode.HashCode), assetName, "Asset name", binaryWriter); _assetBundleAssetPaths[abName].Add(assetName); AssetData assetData = assetBundleData.GetAssetData(assetName); string[] dependencyAssetNames = assetData.GetDependencyAssetNames(); binaryWriter.Write(dependencyAssetNames.Length); foreach (string dependencyAssetName in dependencyAssetNames) { _writerStr(Icarus.GameFramework.Utility.Converter.GetBytes(assetBundleCode.HashCode), dependencyAssetName, "Dependency asset name", binaryWriter); } } binaryWriter.Write(0); binaryWriter.Close(); } } var abVersionPath = Icarus.GameFramework.Utility.Path.GetResourceNameWithSuffix(AbpackageListPath); File.Move(AbpackageListPath, abVersionPath); #region Zip var zipPath = outputPackagePath.Replace(OutputPackagePath, OutputZipPath); var abFullName = GetAssetBundleFullName(assetBundleData.Name, assetBundleData.Variant); var zipFilePath = Path.Combine(zipPath, abFullName + ".zip"); Runtime.Utility.ZipUtil.UpdateZipAdd(zipFilePath, outputPackagePath, new [] { abVersionPath, }); #endregion } }