public static byte[] WriteBundle(UnityAssetsBundle assetsBundle) { var bundleStream = new MemoryStream(); var bundleWriter = new EndianBinaryWriter(bundleStream); if (assetsBundle.Header.Type == EBundleType.UnityFs) { bundleWriter.Write(assetsBundle.Header.RawStrType, true); bundleWriter.Write(assetsBundle.Header.Format); bundleWriter.Write(assetsBundle.Header.EngineVer, true); bundleWriter.Write(assetsBundle.Header.PlayerVer, true); if (assetsBundle.Header.Format == 6) { var(info, infoLen, blocks) = BuildFormat6(assetsBundle.Payload); var bundleSize = (long)(bundleWriter.Position + 20 + info.Length + blocks.Length); bundleWriter.Write(bundleSize); bundleWriter.Write(info.Length); bundleWriter.Write(infoLen); bundleWriter.Write(assetsBundle.Payload.Flags); bundleWriter.Write(info); bundleWriter.Write(blocks); } else { throw new NotSupportedException($"Allow only 6 format, but read {assetsBundle.Header.Format}"); } } else { throw new NotSupportedException($"Support only UnityFS, but read {assetsBundle.Header.Type:G}"); } return(bundleStream.ToArray()); }
public static UnityAssetsBundle ReadBundle(byte[] bundleFileBytes) { var bundle = new UnityAssetsBundle(); var reader = new EndianBinaryReader(new MemoryStream(bundleFileBytes)); //read bundle type bundle.Header.RawStrType = reader.ReadStringToNull(); switch (bundle.Header.RawStrType) { case "UnityFS": bundle.Header.Type = EBundleType.UnityFs; break; case "UnityRaw": bundle.Header.Type = EBundleType.UnityRaw; break; case "\xFA\xFA\xFA\xFA\xFA\xFA\xFA\xFA": //.bytes case "UnityWeb": bundle.Header.Type = EBundleType.UnityWeb; break; default: throw new NotSupportedException($"Unknown bundle type {bundle.Header.RawStrType}!"); } if (bundle.Header.Type == EBundleType.UnityFs) { bundle.Header.Format = reader.ReadInt32(); bundle.Header.EngineVer = reader.ReadStringToNull(); bundle.Header.PlayerVer = reader.ReadStringToNull(); if (bundle.Header.Format == 6) { bundle.Payload = ReadFormat6(reader); } else { throw new NotSupportedException($"Allow only 6 format, but read {bundle.Header.Format}"); } } else { throw new NotSupportedException($"Support only UnityFS, but read {bundle.Header.Type:G}"); } return(bundle); }
/// <summary> /// /// </summary> /// <param name="needs"></param> /// <returns></returns> private IEnumerator LoadUnityAssetsBundle(AssetParameter[] needs, UnityAssetManager unityAssetManager) { foreach (AssetParameter par in needs) { if (DebugMode) { UnityEngine.Object assetObject = Resources.Load(par.Path); ResourcesBundle tem = new ResourcesBundle((UnityAssetManager)GTLib.AssetManager, par, assetObject); yield return(tem); } else { string path = GetPath(par); byte[] stream = File.ReadAllBytes(path); AssetBundle bundle = AssetBundle.CreateFromMemoryImmediate(stream); UnityAssetsBundle tem = new UnityAssetsBundle((UnityAssetManager)GTLib.AssetManager, par); tem.SetAssetBundle(bundle); yield return(tem); } } yield return(null); syLoadUnityAssetsBundle = null; }