Beispiel #1
0
        /// <summary>
        // 递归处理文件夹下所有Asset 文件
        /// </summary>
        /// <param name="folderPath">Asset目录下文件夹</param>
        private static void AutoGenAssetNameInFolder(string folderPath, bool useFolderName)
        {
            if (folderPath == null)
            {
                Log.w("Folder Path Is Null!");
                return;
            }

            Log.i("Start Set Asset Name. Folder:" + folderPath);
            string workPath        = EditorUtils.AssetsPath2ABSPath(folderPath);              //EditUtils.GetFullPath4AssetsPath(folderPath);
            string assetBundleName = EditorUtils.AssetPath2ReltivePath(folderPath).ToLower(); //EditUtils.GetReltivePath4AssetPath(folderPath).ToLower();

            assetBundleName = assetBundleName.Replace("resources/", "");
            //处理文件
            var filePaths = Directory.GetFiles(workPath);

            for (int i = 0; i < filePaths.Length; ++i)
            {
                if (!AssetFileFilter.IsAsset(filePaths[i]))
                {
                    continue;
                }

                string fileName = Path.GetFileName(filePaths[i]);

                string fullFileName = string.Format("{0}/{1}", folderPath, fileName);

                AssetImporter ai = AssetImporter.GetAtPath(fullFileName);
                if (ai == null)
                {
                    Log.e("Not Find Asset:" + fullFileName);
                    continue;
                }
                else
                {
                    if (useFolderName)
                    {
                        ai.assetBundleName = assetBundleName + ".bundle";
                    }
                    else
                    {
                        ai.assetBundleName = string.Format("{0}/{1}.bundle", assetBundleName, PathHelper.FileNameWithoutSuffix(fileName));
                    }
                }

                //ai.SaveAndReimport();
                //Log.i("Success Process Asset:" + fileName);
            }

            //递归处理文件夹
            var dirs = Directory.GetDirectories(workPath);

            for (int i = 0; i < dirs.Length; ++i)
            {
                string fileName = Path.GetFileName(dirs[i]);

                fileName = string.Format("{0}/{1}", folderPath, fileName);
                AutoGenAssetNameInFolder(fileName, useFolderName);
            }
        }
Beispiel #2
0
        private static void ProcessTableConfig(AssetDataTable table, string folder)
        {
            AssetDataPackage group = null;

            DirectoryInfo direInfo = new DirectoryInfo(folder);

            FileInfo[] fileInfos = direInfo.GetFiles();

            if (fileInfos == null || fileInfos.Length == 0)
            {
                return;
            }

            for (int i = 0; i < fileInfos.Length; ++i)
            {
                FileInfo info = fileInfos[i];

                if (AssetFileFilter.IsConfigTable(info.FullName))
                {
                    string md5       = GetMD5HashFromFile(info.FullName);
                    long   buildTime = DateTime.Now.Ticks;//info.LastWriteTime.Ticks;
                    table.AddAssetBundleName(ProjectPathConfig.tableFolder + info.Name, null, md5, (int)info.Length, buildTime, out group);
                }
            }

            table.Dump();
        }
Beispiel #3
0
        private static void CollectABInFolder(string folderPath, Dictionary <string, int> builderData)
        {
            if (folderPath == null)
            {
                Log.w("Folder Path Is Null.");
                return;
            }

            string workPath = EditorUtils.AssetsPath2ABSPath(folderPath);

            var filePaths = Directory.GetFiles(workPath);

            for (int i = 0; i < filePaths.Length; ++i)
            {
                if (!AssetFileFilter.IsAsset(filePaths[i]))
                {
                    continue;
                }

                string fileName = Path.GetFileName(filePaths[i]);

                string fullFileName = string.Format("{0}/{1}", folderPath, fileName);

                AssetImporter ai = AssetImporter.GetAtPath(fullFileName);
                if (ai == null)
                {
                    Log.w("Not Find Asset:" + fullFileName);
                    continue;
                }
                else if (!string.IsNullOrEmpty(ai.assetBundleName))
                {
                    RecordNewAB(ai.assetBundleName, builderData);
                }
            }

            //递归处理文件夹
            var dirs = Directory.GetDirectories(workPath);

            for (int i = 0; i < dirs.Length; ++i)
            {
                string fileName = Path.GetFileName(dirs[i]);

                fileName = string.Format("{0}/{1}", folderPath, fileName);
                CollectABInFolder(fileName, builderData);
            }
        }
Beispiel #4
0
        private static void RemoveInvalidAssetBundleInner(string absPath, AssetDataTable table)
        {
            string[] dirs = Directory.GetDirectories(absPath);

            if (dirs != null && dirs.Length > 0)
            {
                for (int i = 0; i < dirs.Length; ++i)
                {
                    RemoveInvalidAssetBundleInner(dirs[i], table);
                }
            }

            string[] files = Directory.GetFiles(absPath);
            if (files != null && files.Length > 0)
            {
                for (int i = 0; i < files.Length; ++i)
                {
                    string p = AssetBundlePath2ABName(files[i]);
                    if (!AssetFileFilter.IsAssetBundle(p))
                    {
                        continue;
                    }

                    if (table.GetABUnit(p) == null)
                    {
                        File.Delete(files[i]);
                        File.Delete(files[i] + ".meta");
                        File.Delete(files[i] + ".manifest");
                        File.Delete(files[i] + ".manifest.meta");

                        Log.e("Delete Invalid AB:" + p);
                    }
                }

                files = Directory.GetFiles(absPath);
                if (files == null || files.Length == 0)
                {
                    Directory.Delete(absPath);
                }
            }
            else
            {
                Directory.Delete(absPath);
            }
        }
        private ABState VisitorFolder(string absPath, IFolderVisitor visitor)
        {
            if (visitor == null)
            {
                return(ABState.NONE);
            }

            ABState state = new ABState();

            var dirs = Directory.GetDirectories(absPath);

            if (dirs.Length > 0)
            {
                for (int i = 0; i < dirs.Length; ++i)
                {
                    ABState subState = VisitorFolder(dirs[i], visitor);

                    if (subState.hasMixed)
                    {
                        state.hasMixed = true;
                    }

                    if (subState.isLost)
                    {
                        state.isLost = true;
                    }
                }
            }

            var files = Directory.GetFiles(absPath);

            if (files.Length > 0)
            {
                for (int i = 0; i < files.Length; ++i)
                {
                    if (!AssetFileFilter.IsAsset(files[i]))
                    {
                        continue;
                    }

                    AssetImporter ai = AssetImporter.GetAtPath(EditorUtils.ABSPath2AssetsPath(files[i]));
                    if (ai != null)
                    {
                        if (!string.IsNullOrEmpty(ai.assetBundleName))
                        {
                            //Log.i("Files:" + files[i] + " ---> " + ai.assetBundleName);
                            string assetPath  = EditorFileUtils.RemoveFileExtend(ai.assetPath).ToLower();
                            string bundleName = EditorFileUtils.RemoveFileExtend(ai.assetBundleName);
                            if (assetPath.EndsWith(bundleName))
                            {
                                //Log.i("File Flag:" + assetPath);
                                state.flag |= ABStateDefine.FILE;
                                visitor.OnAssetVisitorResult(ai, ABStateDefine.FILE);
                            }
                            else
                            {
                                //Log.i("##Folder Flag:" + assetPath);
                                state.flag |= ABStateDefine.FOLDER;
                                visitor.OnAssetVisitorResult(ai, ABStateDefine.FOLDER);
                            }
                        }
                        else
                        {
                            state.isLost = true;
                            visitor.OnAssetVisitorResult(ai, ABStateDefine.LOST);
                        }
                    }
                }
            }

            if (state.isMixedFlag)
            {
                state.hasMixed = true;
            }
            visitor.OnFolderVisitorResult(absPath, state);
            return(state);
        }