Ejemplo n.º 1
0
        /// <summary>
        /// 根据打包选项获取需要搜索的文件夹
        /// </summary>
        /// <returns></returns>
        protected List <string> GetPackDirectories()
        {
            string rootDirectory   = m_packSetting.SrcDir;
            string childDirctory   = m_packBundleSetting.SubFolder;
            string searchDirectory = string.IsNullOrEmpty(childDirctory) ? rootDirectory : Path.Combine(rootDirectory, childDirctory);

            List <string> directories = new List <string>();

            if (m_packBundleSetting.SearchSubDir)
            {
                directories = EngineFileUtil.SearchDirectoryRecursively(searchDirectory);
            }
            else
            {
                directories.Add(searchDirectory);
            }

            return(directories);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 处理最后要把资源拷贝到其他的目录
        /// </summary>
        private static void CopyGOEBundleToPath(string orignalGOEBundleListPath)
        {
            //拷贝到程序的开发目录(如果有目录)
            if (Directory.Exists(PathConfig.CODE_ROOT))
            {
                DirectoryInfo devPath = new DirectoryInfo(PathConfig.BIN_RES_DIR_WINDOWS_DEV);
                if (!devPath.Exists)
                {
                    devPath.Create();
                }

                FileInfo[] files = devPath.GetFiles("*.*");
                foreach (FileInfo file in files)
                {
                    file.Delete();
                }

                EngineFileUtil.CopyDirectory(orignalGOEBundleListPath, PathConfig.BIN_RES_DIR_WINDOWS_DEV);
            }
        }
Ejemplo n.º 3
0
        public override Dictionary <string, List <string> > GetAssetsDictByPackSetting()
        {
            Dictionary <string, List <string> > bundlemapDict = new Dictionary <string, List <string> >();

            List <string> directories = GetPackDirectories();

            foreach (string directory in directories)
            {
                string relativeDirectoryPath = EngineFileUtil.GetFileRelativePath(directory, m_packSetting.SrcDir);
                if (string.IsNullOrEmpty(relativeDirectoryPath))
                {
                    continue;
                }

                string        assetBundleName = MakeAssetbundleName(relativeDirectoryPath);
                List <string> assetFiles      = GetDirectoryFileListWithSearchOption(directory);

                bundlemapDict.Add(assetBundleName, assetFiles);
            }

            return(bundlemapDict);
        }
Ejemplo n.º 4
0
        public override Dictionary <string, List <string> > GetAssetsDictByPackSetting()
        {
            Dictionary <string, List <string> > bundlemapDict = new Dictionary <string, List <string> >();

            List <string> packDirectories = GetPackDirectories();

            foreach (string directory in packDirectories)
            {
                List <string> directoryFiles = GetDirectoryFileListWithSearchOption(directory);

                for (int i = 0; i < directoryFiles.Count; ++i)
                {
                    string fileRelativePath = EngineFileUtil.GetFileRelativePath(directoryFiles[i], m_packSetting.SrcDir);
                    if (string.IsNullOrEmpty(fileRelativePath))
                    {
                        continue;
                    }

                    string fileWithoutExtension = Path.GetFileNameWithoutExtension(directoryFiles[i]);
                    string customBundleName     = fileRelativePath + "_" + fileWithoutExtension;
                    string bundleName           = fileRelativePath == "./" ? MakeAssetbundleName(fileWithoutExtension) : MakeAssetbundleName(customBundleName);

                    if (bundlemapDict.ContainsKey(bundleName))
                    {
                        Debug.LogErrorFormat("bundle  {0} is exist", bundleName);
                    }

                    bundlemapDict.Add(bundleName, new List <string>()
                    {
                        directoryFiles[i]
                    });
                }
            }

            return(bundlemapDict);
        }
Ejemplo n.º 5
0
        bool DoPack(bool silent, BuildTarget target, out string error, HashSet <string> excludePackSet, out Dictionary <string, object> extra, out AssetBundleManifest buildManifest)
        {
            extra         = new Dictionary <string, object>();
            buildManifest = null;

            BuildTargetGroup buildTargetGroup = ConvertBuildTarget(target);

            if (!EditorUserBuildSettings.SwitchActiveBuildTarget(buildTargetGroup, target))
            {
                error = "buildtarget platform : " + target.ToString();
                return(false);
            }

            if (!silent && !UnityEditor.EditorUtility.DisplayDialog("确认打包", "此操作会对所有修改过的资源进行打包,继续吗?", "是", "否"))
            {
                error = null;
                return(true);
            }

            AssetDatabase.SaveAssets();

            string[] files = Directory.GetFiles("Assets/EngineCoreEditor/Editor/PackV5/Definitions/", "*.pack.txt");

            List <AssetBundleBuild> builds       = new List <AssetBundleBuild>();
            List <string>           rawAssetList = new List <string>();

            string outputDir = GetBundleOutputPath(target);

            string currentSceneBeforeBuild = EditorSceneManager.GetActiveScene().path;

            //打开一个空场景
            EditorSceneManager.OpenScene("Assets/EmptyScene.unity");

            foreach (string packConfig in files)
            {
                bool shoudlSkip = excludePackSet != null && excludePackSet.Contains(Path.GetFileName(packConfig));
                if (shoudlSkip)
                {
                    continue;
                }

                //打包选项配置
                GOEPackV5 si = JsonUtil.ReadJsonObject(packConfig) as GOEPackV5;
                string    packingResFolder = si.SrcDir;
                if (!Directory.Exists(packingResFolder))
                {
                    Debug.LogWarningFormat("{0} target resource folder:{1} not exist,ignore build", packConfig, packingResFolder);
                    continue;
                }

                if (si == null)
                {
                    error = "无法读取文件:" + packConfig;
                    if (!silent)
                    {
                        EditorUtility.DisplayDialog("打包错误", error, "确定");
                    }
                    return(false);
                }

                List <AssetBundleBuild> b;
                HashSet <string>        allAssetSet = null;

                if (!si.ConfigureAssetImporter(silent, out error, out b, extra, shoudlSkip, out allAssetSet))
                {
                    return(false);
                }

                if (PackEntry.RawAsset.Contains(Path.GetFileName(packConfig)))
                {
                    rawAssetList.AddRange(allAssetSet);
                }
                else
                {
                    if (!shoudlSkip)
                    {
                        builds.AddRange(b);
                    }
                }
            }

            AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);

            //UnityEditor.Sprites.Packer.SelectedPolicy = "DefaultPackerPolicy1024";

            string currentPackBundleMapPath = Path.Combine(outputDir, BUNDLE_DIR_NAME);         //manifest的bundle没有后缀

            if (builds.Count == 0)
            {
                error = "无打包资源,请检查.pack文件,及.pack文件的Filter";
                return(false);
            }

            buildManifest = BuildPipeline.BuildAssetBundles(outputDir, builds.ToArray(), BuildAssetBundleOptions.ChunkBasedCompression, target);

            string rawAssetDir = Path.Combine(outputDir, PathConfig.RAW_ASSET_PATH);

            EngineFileUtil.ClearOrCreateEmptyFolder(rawAssetDir);

            foreach (string rawAssetPath in rawAssetList)
            {
                string fileName = Path.GetFileName(rawAssetPath);
                string dstPath  = Path.Combine(rawAssetDir, fileName);

                File.Copy(rawAssetPath, dstPath, true);
            }

            if (buildManifest == null)
            {
                error = "打包失败,manifest 文件为空";
                return(false);
            }

            DeleteUselessBundleFiles(buildManifest, outputDir);

            //todo:guangze song  2018-9-5 21:45:39:Editor下,切Scene会把堆对象清空(切Scene之后Manifest被清空)
            //if (!string.IsNullOrEmpty(currentSceneBeforeBuild))
            //    EditorSceneManager.OpenScene(currentSceneBeforeBuild, OpenSceneMode.Single);

            error = string.Empty;
            return(true);
        }