示例#1
0
        /// <summary>
        /// 生成缩略图的 以其 hash 值命名的 对应文件
        /// </summary>
        private static void CreateHashThumbs()
        {
            string outputDir = Path.Combine(DIR_FTP, DIR_HASHTHUMBS);

            ReCreateDirectory(outputDir);

            ResConfig resConfig = JsonUtility.FromJson <ResConfig>(File.ReadAllText(PublisherGlobal.PrimitiveThumbsConfig));

            int counter = 0;

            foreach (ResItem item in resConfig.items)
            {
                counter++;
                EditorUtility.DisplayProgressBar("生成缩率图hash文件", string.Format("生成中....{0}/{1}", counter, resConfig.items.Count), counter * 1.0f / resConfig.items.Count);

                string directoryName = Path.GetDirectoryName(outputDir + "/" + item.path);

                if (!Directory.Exists(directoryName))
                {
                    Directory.CreateDirectory(directoryName);
                }
                string destFilePath = Path.Combine(directoryName, item.hash);
                File.Copy("block_thumbs/" + item.path, destFilePath, true);
            }
            EditorUtility.ClearProgressBar();
        }
示例#2
0
        /// <summary>
        /// 生成指定资源目录内 所有资源的  resconfig.json 配置文件
        /// </summary>
        /// <param name="resDirs">需要生成的资源所在目录</param>
        /// <param name="configFilePath">生成的配置文件路径</param>
        /// <param name="resRefPath">配置文件中 资源下载 相对路径</param>
        /// <param name="filters">需要生成配置项的资源类型</param>
        public static void GenerateResConfig(string[] resDirs, string configFilePath, string resRefPath, Action <ResItem> OnPostProcess,
                                             params string[] filters)
        {
            resRefPath = Path.GetFullPath(resRefPath);
            if (!resRefPath.EndsWith("/"))
            {
                resRefPath += "/";
            }

            string resVersion = "100";

            if (File.Exists(configFilePath))
            {
                ResConfig oldResConfig = JsonUtility.FromJson <ResConfig>(File.ReadAllText(configFilePath));
                resVersion = (int.Parse(oldResConfig.resversion) + 1).ToString();
            }

            ResConfig resConfig = new ResConfig {
                items = new List <ResItem>(), resversion = resVersion
            };

            foreach (string dir in resDirs)
            {
                DirectoryInfo directoryInfo = new DirectoryInfo(dir);

                FileInfo[] fileInfos = directoryInfo.GetFiles("*", SearchOption.AllDirectories)
                                       .Where(s => !s.Name.EndsWith(".DS_Store") &&
                                              (filters == null || filters.Contains(Path.GetExtension(s.FullName)))).ToArray();
                int total   = fileInfos.Length;
                int counter = 0;
                foreach (var fileInfo in fileInfos)
                {
                    string  fullName = fileInfo.FullName;
                    string  refPath  = fullName.Replace(resRefPath, "");
                    ResItem item     = CreateConfigItem(fullName, Path.GetFileNameWithoutExtension(fullName), refPath);
                    if (OnPostProcess != null)
                    {
                        OnPostProcess(item);
                    }
                    resConfig.items.Add(item);

                    counter++;
                    EditorUtility.DisplayProgressBar("generating resconfig", "generating" + counter + "/" + total, counter * 1.0f / total);
                }
            }

            string configDir = Path.GetDirectoryName(configFilePath);

            if (!Directory.Exists(configDir))
            {
                Directory.CreateDirectory(configDir);
            }
            string contents = JsonUtility.ToJson(resConfig, true);

            File.WriteAllText(configFilePath, contents);
            AssetDatabase.Refresh();

            EditorUtility.ClearProgressBar();
        }
        private static void CreateSkuModelResConfig(List <SkuData> skuItems, string outputpath, string buildconfigpath)
        {
            if (skuItems == null || skuItems.Count == 0)
            {
                Debug.LogError("当前Sku数据为空");
                return;
            }

            if (!Directory.Exists(outputpath))
            {
                Directory.CreateDirectory(outputpath);
            }

            int totalCount    = skuItems.Count;
            int count         = 0;
            var outputDirName = outputpath.Substring(outputpath.LastIndexOf("/", StringComparison.Ordinal) + 1);

            foreach (var skuItem in skuItems)
            {
                var skuModelResConfig = new ResConfig {
                    resversion = "100", items = new List <ResItem>()
                };

                List <SkuCarData> skuCarItems = skuItem.Models.ToList();

                foreach (var itemCarItem in skuCarItems)
                {
                    string filePath = Path.Combine(buildconfigpath, itemCarItem.model_sku_id);

                    if (!File.Exists(filePath))
                    {
                        Debug.LogError("can not find :>>>" + filePath);
                        continue;
                    }
                    var carModelConfig = File.ReadAllText(filePath);
                    var resConfig      = JsonUtility.FromJson <ResConfig>(carModelConfig);
                    foreach (var configItem in resConfig.items)
                    {
                        if (skuModelResConfig.items.All(s => s.path != configItem.path))
                        {
                            skuModelResConfig.items.Add(configItem);
                        }
                    }
                }
                string resultContent = JsonUtility.ToJson(skuModelResConfig, true);
                File.WriteAllText(Path.Combine(outputpath, skuItem.block_sku_id.ToString()), resultContent);
                count++;
                bool result = EditorUtility.DisplayCancelableProgressBar("生成SKU模型资源配置表" + outputDirName,
                                                                         string.Format(skuItem.block_sku_id + "生成中....{0}/{1}", count, totalCount), count * 1.0f / totalCount);
                if (result)
                {
                    break;
                }
            }
            EditorUtility.ClearProgressBar();
            EditorUtility.DisplayDialog("create sku block model res config files", "finished->" + outputDirName, "OK");
        }
示例#4
0
        public static void CreateResDatabaseConfig()
        {
            var bytes   = GetFileBytes(PublisherGlobal.PrimitiveThumbsConfig);
            var md5Tumb = GetMD5(bytes);

            bytes = GetFileBytes(PublisherGlobal.PrimitiveAndroidResConfig);
            var md5Android = GetMD5(bytes);

            bytes = GetFileBytes(PublisherGlobal.PrimitiveiOSResConfig);
            var md5iOS = GetMD5(bytes);

            string newVersion    = "100";
            var    md5           = Md5Encrypt(md5Tumb + md5Android + md5iOS);
            var    resConfigPath = Path.Combine(DIR_FTP, PublisherGlobal.DIR_RESDATABASE) + "/" + FILENAME_RESCONFIG;

            if (File.Exists(resConfigPath))
            {
                var content   = File.ReadAllText(resConfigPath);
                var oldConfig = JsonUtility.FromJson <ResConfig>(content);
                if (oldConfig.items[0].hash != md5)
                {
                    newVersion = (int.Parse(oldConfig.resversion) + 1).ToString();
                }
                else
                {
                    newVersion = oldConfig.resversion;
                }
            }

            var destDir = Path.GetDirectoryName(resConfigPath);

            if (!Directory.Exists(destDir))
            {
                Directory.CreateDirectory(destDir);
            }

            var     zipFilePath = Path.Combine(destDir, "resdatabase.zip");
            FastZip fastZip     = new FastZip();

            fastZip.CreateZip(zipFilePath, "resdatabase", false, ".json");

            ResConfig newResConfig = new ResConfig();

            newResConfig.resversion = newVersion;
            newResConfig.items      = new List <ResItem>();
            newResConfig.items.Add(new ResItem()
            {
                name = "resdatabase",
                path = "resdatabase.zip",
                hash = md5,
                size = GetFileBytes(zipFilePath).Length
            });
            var t = JsonUtility.ToJson(newResConfig, true);

            File.WriteAllText(resConfigPath, t);
        }
示例#5
0
        private static bool CreateBuildingThumbConfigFile(string filePath, List <ResItem> thumbInfoItems, string outputDir, bool isOnline)
        {
            var fileName = Path.GetFileNameWithoutExtension(filePath);

            if (EXCLUDE_BUILDINGS.Contains(fileName))
            {
                return(false);
            }

#if BLOCK_EDITOR
            PPBlockConfigInfo configInfo = PBBlockConfigManager.LoadBlockInfosWithoutAnim(filePath);
#elif BLOCK_MODEL
            var path       = "./" + BlockServerUtil.GetBuildAnimPath(isOnline) + "/" + fileName + ".txt";
            var configText = File.Exists(path) ? File.ReadAllText(path, Encoding.UTF8) : string.Empty;
            PPBlockConfigInfo configInfo = PBBlockConfigManager.LoadBlockInfosWithoutAnim(fileName + ".txt", configText);
            if (configInfo == null)
            {
                Debug.LogError(path + ">>>" + (File.Exists(path) ? "搭建文件内容有问题!" : "搭建文件不存在!"));
                return(false);
            }
#endif
            var buildingThumbs = new ResConfig {
                resversion = "100", items = new List <ResItem>()
            };

            foreach (var item in configInfo.BlockInfos)
            {
                var equal = item.BlockInfo.IsStamp ? item.BlockInfo.GetStampThumb : item.ThumbName;
                if (thumbInfoItems.Any(s => s.name.Equals(equal)))
                {
                    var t = thumbInfoItems.FirstOrDefault(s => s.name.Equals(equal));
                    buildingThumbs.items.Add(t);
                }
                else
                {
                    if (item.ThumbName != "diban")
                    {
                        if (!mThumbErrors.Contains(fileName))
                        {
                            mThumbErrors.Add(fileName);
                        }
                        Debug.LogError(item.ThumbName + ">>>>*找不到缩率图******" + equal + ".png");
                    }
                }
            }

            var config = JsonUtility.ToJson(buildingThumbs, true);
            File.WriteAllText(Path.Combine(outputDir, fileName), config);
            return(true);
        }
        private static bool CreateBuildingModeResFile(string filePath, List <ResItem> modelAbInfoItems, List <ResItem> textureInfoItems, List <PEMaterialUtl.MaterialInfo> materialInfos, string outputDir, bool isOnline)
        {
            var fileName = Path.GetFileNameWithoutExtension(filePath);

            if (ResPublisher.EXCLUDE_BUILDINGS.Contains(fileName))
            {
                return(false);
            }

                        #if BLOCK_EDITOR
            PPBlockConfigInfo configInfo = PBBlockConfigManager.LoadBlockInfosWithoutAnim(filePath);
                        #elif BLOCK_MODEL
//			var path = "./" + BlockServerUtil.GetBuildAnimPath(isOnline) + "/" + fileName + ".txt";
            var path       = "./" + BlockServerUtil.GetBuildAnimPath(isOnline) + "/" + fileName + ".txt";      //here change later
            var configText = File.Exists(path) ? File.ReadAllText(path, Encoding.UTF8) : string.Empty;
            PPBlockConfigInfo configInfo = PBBlockConfigManager.LoadBlockInfosWithoutAnim(fileName, configText);
            if (configInfo == null)
            {
                Debug.LogError(path + ">>>" + (File.Exists(path) ? "搭建文件内容有问题!" : "搭建文件不存在!"));
                return(false);
            }
                        #endif
            var buildingModelResConfig = new ResConfig {
                resversion = "100", items = new List <ResItem>()
            };

            foreach (var item in configInfo.BlockInfos)
            {
                //地板特殊处理,配置表里面没有地板
                if (item.PrefabName == "diban")
                {
                    AddResItem("diban", "Assets/blockres/lowpolygon/category_1/block_fbxs/diban", buildingModelResConfig.items, modelAbInfoItems);
                    continue;
                }

                if (item.PrefabName.StartsWith("sticker"))
                {
                    CreateStickerItem(item.PrefabName, buildingModelResConfig.items, modelAbInfoItems, textureInfoItems);
                    continue;
                }

                var blockData = PBDataBaseManager.Instance.GetDataWithPrefabName(item.PrefabName) as BlockData;

                Category category = (Category)Enum.Parse((typeof(Category)), blockData.category);

                string fbxDir = (BlockPath.Fbx(category, PolygonType.LOW));
                string matDir = (BlockPath.Material(category, PolygonType.LOW));

                AddResItem(blockData.model, (Path.Combine(fbxDir, blockData.model)), buildingModelResConfig.items, modelAbInfoItems);

                CreateMaterials(blockData.material, matDir, buildingModelResConfig.items, modelAbInfoItems, textureInfoItems, materialInfos);

                CreateTextures(item, buildingModelResConfig.items, modelAbInfoItems, textureInfoItems);
            }

            var config = JsonUtility.ToJson(buildingModelResConfig, true);

            File.WriteAllText(Path.Combine(outputDir, fileName), config);

            return(true);
        }