/// <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(); }
/// <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"); }
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); }
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); }