/** * 递归获取一段资源列表的所有依赖资源 */ private void GetAllDependenciesList( ref List <string> allDependenciesList, // 最终结果 List <string> resources // 要记入的资源 ) { //Debug.Log("GetAllDependenciesList" + allDependenciesList.ToArray().Length); foreach (string resourcePath in resources) { JSONObject resourceStorage = storage.GetField(resourcePath); if (resourceStorage == null) { Debug.LogError("创建资源包时写入'" + resourcePath + "'失败,没有找到该资源的转换记录"); continue; } List <string> dependencies = WXUtility.ConvertJSONArrayToList( resourceStorage.GetField("dependencies") ); if (dependencies != null && dependencies.ToArray().Length > 0) { GetAllDependenciesList(ref allDependenciesList, dependencies); // 排重后add入 foreach (string dependency in dependencies) { if (!allDependenciesList.Contains(dependency)) { allDependenciesList.Add(dependency); } } } // 加入它本身 if (!allDependenciesList.Contains(resourcePath)) { allDependenciesList.Add(resourcePath); } } }
private void writeResourceRecursive(string resourceDescriptionFilePath) { // 如果已经转换过了 if (packageGroupManifest_resourceDefinitions.HasField(resourceDescriptionFilePath)) { return; } // 先找到之前已经写入缓存表的资源。 JSONObject resourceStorage = storage.GetField("assets").GetField(resourceDescriptionFilePath); if (resourceStorage == null) { Debug.LogError("创建资源包时写入'" + resourceDescriptionFilePath + "'失败,没有找到该资源的转换记录"); return; } // 创建每一个资源definition的json对象 JSONObject definitionObject = new JSONObject(JSONObject.Type.OBJECT); packageGroupManifest_resourceDefinitions.AddField(resourceDescriptionFilePath, definitionObject); // 写入字段 definitionObject.AddField("dependencies", resourceStorage.GetField("dependencies")); definitionObject.AddField("type", resourceStorage.GetField("type")); definitionObject.AddField("descriptionFileID", resourceDescriptionFilePath); // 把记在缓存里的useFile拿出来,遍历,写入group.manifest.json的fileDescription字段 // 并且排除掉resourceDescriptionFilePath之后放入resourceDefinition JSONObject outputUseFileArray = new JSONObject(JSONObject.Type.ARRAY); definitionObject.AddField("useFile", outputUseFileArray); // 放入文件 foreach (string usingFile in WXUtility.ConvertJSONArrayToList(resourceStorage.GetField("useFile"))) { if (usingFile != resourceDescriptionFilePath) { outputUseFileArray.Add(usingFile); } if (packageGroupManifest_fileDescription.HasField(usingFile)) { continue; } JSONObject fileStorage = storage.GetField("files").GetField(usingFile); // add fileDescriptions JSONObject fileDescription = new JSONObject(JSONObject.Type.OBJECT); packageGroupManifest_fileDescription.AddField(usingFile, fileDescription); fileDescription.AddField("path", usingFile); // add files 555 JSONObject fileItem = new JSONObject(JSONObject.Type.OBJECT); fileItem.AddField("path", usingFile); fileItem.AddField("filetype", fileStorage.GetField("filetype")); packageGroupManifest_files.Add(fileItem); wxFileUtil.CopyFile( Path.Combine(storagePath, Path.Combine(CONTENT_FOLDER, fileStorage.GetField("MD5").GetRawString())), Path.Combine(destPath, usingFile) ); } // 递归转依赖 foreach (string dependencyResource in WXUtility.ConvertJSONArrayToList(resourceStorage.GetField("dependencies"))) { writeResourceRecursive(dependencyResource); } }