Пример #1
0
        public virtual void Export()
        {
            this.Analyze();


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

            for (int i = 0; i < all.Count; i++)
            {
                AssetTarget target = all[i];
                if (target.NeedSelfExport)
                {
                    string assetName = target.assetPath.Replace('\\', '/');
                    if (dic.ContainsKey(target.bundleName))
                    {
                        AssetBundleBuild build = dic[target.bundleName];
                        string[]         ans   = new string[build.assetNames.Length + 1];
                        for (int j = 0; j < build.assetNames.Length; j++)
                        {
                            ans[j] = build.assetNames[j];
                        }
                        ans[build.assetNames.Length] = assetName;
                        build.assetNames             = ans;
                        dic[target.bundleName]       = build;
                    }
                    else
                    {
                        AssetBundleBuild build = new AssetBundleBuild()
                        {
                            assetBundleName = target.bundleName,
                            assetNames      = new string[] { assetName },
                        };
                        dic[target.bundleName] = build;
                    }
                }
            }

            AssetBundleBuild[] builds = dic.Values.ToArray();


            //开始打包
            AssetBundleManifest manifest = BuildPipeline.BuildAssetBundles(pathResolver.BundleSavePath, builds, BuildAssetBundleOptions.ChunkBasedCompression, EditorUserBuildSettings.activeBuildTarget);

            //
            CheckAssetBundleName(manifest, builds);

            SaveFileList(builds);

            //移除无用资源
            RemoveUnused(manifest);


            //
            AssetDatabase.RemoveUnusedAssetBundleNames();
            AssetDatabase.Refresh();
        }
Пример #2
0
        public virtual void Analyze()
        {
            var all = AssetBundleUtils.GetAll();

            foreach (AssetTarget target in all)
            {
                target.Analyze();
            }
            all = AssetBundleUtils.GetAll();
            foreach (AssetTarget target in all)
            {
                target.Merge();
            }
            all = AssetBundleUtils.GetAll();
            foreach (AssetTarget target in all)
            {
                target.AnalyzeBundleName();
            }
            foreach (AssetTarget target in all)
            {
                target.BeforeExport();
            }
        }