Exemplo n.º 1
0
            /**
             * 递归获取一段资源列表的所有依赖资源
             */
            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);
                    }
                }
            }
Exemplo n.º 2
0
            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);
                }
            }