Example #1
0
        static void BuildAssetBundles()
        {
            if (EditorApplication.isPlayingOrWillChangePlaymode)
            {
                Debug.LogError("Exit play mode before build AssetBundle!");
                return;
            }
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
            AssetBundleBuildConfig config = LoadAssetAtPath <AssetBundleBuildConfig>(savePath);

            if (config == null)
            {
                return;
            }

            ABBuilder builder = new AssetBundleBuilder5x(new AssetBundlePathResolver());

            builder.SetDataWriter(config.depInfoFileFormat == AssetBundleBuildConfig.Format.Text ? new AssetBundleDataWriter() : new AssetBundleDataBinaryWriter());

            builder.Begin();

            for (int i = 0; i < config.filters.Count; i++)
            {
                AssetBundleFilter f = config.filters[i];
                if (f.valid)
                {
                    builder.AddRootTargets(new DirectoryInfo(f.path), f.packMode, f.filter);
                }
            }
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
            builder.Export();
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
            builder.End();
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
        }
Example #2
0
        public void ExportImp()
        {
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);

            List <AssetBundleBuild> list = new List <AssetBundleBuild>();
            //标记所有 asset bundle name
            var all      = AssetBundleUtils.GetAll();
            var abAssets = new Dictionary <string, HashSet <AssetTarget> >();

            for (int i = 0; i < all.Count; i++)
            {
                AssetTarget target = all[i];
                if (target.needSelfExport)
                {
                    if (!abAssets.ContainsKey(target.abFileName))
                    {
                        abAssets.Add(target.abFileName, new HashSet <AssetTarget>());
                    }
                    abAssets[target.abFileName].Add(target);
                    AssetBundleBuild build = new AssetBundleBuild();
                    build.assetBundleName = target.abFileName;
                    build.assetNames      = new string[] { target.assetPath };
                    list.Add(build);
                }
            }

            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
            //开始打包
            BuildAssetBundleOptions buildOptions = BuildAssetBundleOptions.DeterministicAssetBundle |
                                                   BuildAssetBundleOptions.ChunkBasedCompression |
                                                   BuildAssetBundleOptions.DisableWriteTypeTree;

            BuildPipeline.BuildAssetBundles(pathResolver.BundleSavePath, list.ToArray(), buildOptions,
                                            EditorUserBuildSettings.activeBuildTarget);
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
            AssetBundle         ab       = AssetBundle.LoadFromFile(pathResolver.BundleSavePath + "/AssetBundles");
            AssetBundleManifest manifest = ab.LoadAsset("AssetBundleManifest") as AssetBundleManifest;

            //hash
            for (int i = 0; i < all.Count; i++)
            {
                AssetTarget target = all[i];
                if (target.needSelfExport)
                {
                    Hash128 hash = manifest.GetAssetBundleHash(target.abFileName);
                    target.bundleCrc = hash.ToString();
                }
            }
            this.SaveDepAll(all, manifest, abAssets);
            this.RemoveUnused(all, manifest);
            ab.Unload(true);
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
            AssetDatabase.RemoveUnusedAssetBundleNames();
            AssetDatabase.Refresh();
            AssetBundleManager.Log("building... cur Time " + Time.realtimeSinceStartup);
        }
Example #3
0
        protected override IEnumerator LoadFromPackage()
        {
            //兼容低版本API
#if UNITY_4 || UNITY_4_6 || UNITY_5_1 || UNITY_5_2
            _bundle = AssetBundle.CreateFromFile(_assetBundleSourceFile);
            yield return(null);
#else
            _assetBundleSourceFile = bundleManager.pathResolver.GetBundleSourceFile(bundleName, false);
            AssetBundleCreateRequest req = AssetBundle.LoadFromFileAsync(_assetBundleSourceFile);
            AssetBundleManager.Log("Load begin: " + bundleData.debugName);
            yield return(req);

            _bundle = req.assetBundle;
#endif
            this.Complete();
        }
Example #4
0
        /// <summary>
        /// 从已缓存的文件里加载
        /// </summary>
        /// <returns></returns>
        protected virtual IEnumerator LoadFromCachedFile()
        {
            if (state != LoadState.State_Error)
            {
                //兼容低版本API
#if UNITY_4 || UNITY_4_6 || UNITY_5_1 || UNITY_5_2
                _bundle = AssetBundle.CreateFromFile(_assetBundleCachedFile);
                yield return(null);
#else
                AssetBundleCreateRequest req = AssetBundle.LoadFromFileAsync(_assetBundleCachedFile);
                AssetBundleManager.Log("Load begin: " + bundleData.debugName);
                yield return(req);

                _bundle = req.assetBundle;
#endif

                this.Complete();
            }
        }