Esempio n. 1
0
        public AssetBundle LoadAssetBundle(string bundleName, bool cache = true)
        {
            if (assetBundleCache.ContainsKey(bundleName))
            {
                return(assetBundleCache[bundleName]);
            }
            AssetBundle bundle = null;

            var memory = BundleLoader.LoadFileMemory(LocalVersionConfig.bundleRelativePath + "/" + bundleName + BundleConfig.suffix);

            using (var bundleStream = BundleEncode.DeompressAndDecryptLZMA(memory, password))
            {
                if (bundleStream == null)
                {
                    return(bundle);
                }
                bundle = AssetBundle.CreateFromMemoryImmediate(bundleStream.ToArray());
                if (bundle == null)                             // 如果没有则直接返回
                {
                    return(bundle);
                }
            }
            if (cache)
            {
                assetBundleCache.Add(bundleName, bundle);
            }
            return(bundle);
        }
Esempio n. 2
0
        void GetAssetPoolBundles()
        {
            string relativePath = BuildPath + "/" + BundleConfig.versionFileName;

            var memory = File.ReadAllBytes(relativePath);

            using (MemoryStream memoryStream = new MemoryStream())
            {
                byte[] length = null;
                int    offset = System.Runtime.InteropServices.Marshal.SizeOf(typeof(int));
                memoryStream.Write(memory, 0, offset);
                length = memoryStream.ToArray();
                var versionLength = BitConverter.ToInt32(length, 0);


                memoryStream.Position = 0;
                memoryStream.Write(memory, offset, versionLength);
                byte[] versionByte = memoryStream.ToArray();
                using (MemoryStream versionStream = new MemoryStream(versionByte))
                {
                    string versionContent = "";
                    StreamUtils.Read(versionStream, out versionContent);
                    currVersion = JsonMapper.ToObject <VersionConfig>(versionContent);
                }

                offset = offset + versionByte.Length;
                int limit = memory.Length - offset;

                memoryStream.Position = 0;
                memoryStream.Write(memory, offset, limit);
                byte[] buffer = memoryStream.ToArray();
                int    index  = 0;
                int    count  = 0;
                foreach (var item in currVersion.bundles)
                {
                    Debug.Log("Item is : " + item.name);
                    count = (int)item.size;
                    using (MemoryStream bundleStream = new MemoryStream()){
                        bundleStream.Write(buffer, index, count);
                        //File.WriteAllBytes (BuildPath + "/" + item.name + BundleConfig.suffix, bundleStream.ToArray ());
                        var decryptBuffer = BundleEncode.DeompressAndDecryptLZMA(bundleStream.ToArray(), BundleConfig.password);
                        var assetbundle   = AssetBundle.CreateFromMemoryImmediate(decryptBuffer.ToArray());
                        foreach (var entry in item.include)
                        {
                            Debug.Log("Asset Name is : " + entry);
                        }
                        assetbundle.Unload(true);
                    }
                    index += count;
                }
            }
        }