示例#1
0
        private void CookBundle(string bundleName, List <FileInfo> assets, List <string> bundleBackups)
        {
            OutputBundle = CreateOutputBundle(bundleName, bundleBackups);
            try {
                CookBundleHelper();
                // Open the bundle again in order to make some plugin post-processing (e.g. generate code from scene assets)
                using (new DirectoryChanger(The.Workspace.AssetsDirectory)) {
                    PluginLoader.AfterAssetsCooked(bundleName);
                }
            } finally {
                OutputBundle.Dispose();
                OutputBundle = null;
            }

            void CookBundleHelper()
            {
                Console.WriteLine("------------- Cooking Assets ({0}) -------------", bundleName);
                var savedInputBundle = InputBundle;

                AssetBundle.SetCurrent(new CustomSetAssetBundle(InputBundle, assets), resetTexturePool: false);
                // Every asset bundle must have its own atlases folder, so they aren't conflict with each other
                atlasesPostfix = bundleName != CookingRulesBuilder.MainBundleName ? bundleName : "";
                try {
                    foreach (var stage in CookStages)
                    {
                        CheckCookCancelation();
                        stage.Action();
                    }
                    // Warn about non-power of two textures
                    foreach (var path in OutputBundle.EnumerateFiles())
                    {
                        if ((OutputBundle.GetAttributes(path) & AssetAttributes.NonPowerOf2Texture) != 0)
                        {
                            Console.WriteLine("Warning: non-power of two texture: {0}", path);
                        }
                    }
                } finally {
                    AssetBundle.SetCurrent(savedInputBundle, resetTexturePool: false);
                    ModelsToRebuild.Clear();
                    atlasesPostfix = "";
                }
            }
        }