//------------------------------------------------------------------------- void _copyDir(Casinos._eEditorRunSourcePlatform platform, string path_src, string path_dst) { DirectoryInfo dir = new DirectoryInfo(path_src); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos();// 获取目录下(不包含子目录)的文件和子目录 foreach (FileSystemInfo i in fileinfo) { if (i is DirectoryInfo)// 判断是否文件夹 { if (!Directory.Exists(path_dst + "\\" + i.Name)) { Directory.CreateDirectory(path_dst + "\\" + i.Name); } _copyDir(platform, i.FullName, path_dst + "\\" + i.Name);// 递归调用复制子文件夹 } else { string file_extension = Path.GetExtension(i.FullName); if (DoNotPackFileExtention.Contains(file_extension)) { continue; } File.Copy(i.FullName, path_dst + "\\" + i.Name, true);// 不是文件夹即复制文件,true表示可以覆盖同名文件 } } }
//------------------------------------------------------------------------- void _genDataFileList2(StreamWriter sw, HashSet <string> ignore_files, string cur_path, string path_dst) { string[] files = Directory.GetFiles(cur_path); foreach (var i in files) { string directory_name = Path.GetDirectoryName(i); directory_name = directory_name.Replace(@"\", "/"); directory_name = directory_name.Substring(directory_name.LastIndexOf("/") + 1); string file_name = Path.GetFileName(i); if (ignore_files.Contains(file_name)) { continue; } string file_extension = Path.GetExtension(i); if (DoNotPackFileExtention.Contains(file_extension)) { continue; } string file_directory = Path.GetDirectoryName(i); file_directory = file_directory.Replace(@"\", "/"); string target_path = file_directory.Replace(path_dst, ""); string file_path = i; string file_md5 = _calcOneFileMD5(target_path, file_name, file_path); sw.WriteLine(file_md5); } string[] directorys = Directory.GetDirectories(cur_path); foreach (var i in directorys) { _genDataFileList2(sw, ignore_files, i, path_dst); } }
//------------------------------------------------------------------------- void _buildAssetBundle(Casinos._eEditorRunSourcePlatform platform, bool selected_or_all) { BuildTarget build_target = BuildTarget.Android; BuildTargetGroup build_target_group = BuildTargetGroup.Android; switch (platform) { case Casinos._eEditorRunSourcePlatform.Android: build_target = BuildTarget.Android; build_target_group = BuildTargetGroup.Android; break; case Casinos._eEditorRunSourcePlatform.IOS: build_target = BuildTarget.iOS; build_target_group = BuildTargetGroup.iOS; break; case Casinos._eEditorRunSourcePlatform.PC: build_target = BuildTarget.StandaloneWindows64; build_target_group = BuildTargetGroup.Standalone; break; } EditorUserBuildSettings.SwitchActiveBuildTarget(build_target_group, build_target); UnityEngine.Object[] select_objs = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets); Dictionary <string, List <string> > map_single_pkg = new Dictionary <string, List <string> >(); Dictionary <string, List <string> > map_fold_pkg = new Dictionary <string, List <string> >(); Dictionary <string, List <string> > map_fold_launch = new Dictionary <string, List <string> >(); foreach (var i in select_objs) { string path_asset = AssetDatabase.GetAssetPath(i); string extension = Path.GetExtension(path_asset); if (DoNotPackFileExtention.Contains(extension) || string.IsNullOrEmpty(extension)) { continue; } string file_name = Path.GetFileName(path_asset); if (path_asset.Contains(AssetBundleSingleFoldName)) { string key = Directory.GetParent(path_asset).Name; List <string> list_directory = null; map_single_pkg.TryGetValue(key, out list_directory); if (list_directory == null) { list_directory = new List <string>(); map_single_pkg[key] = list_directory; } list_directory.Add(path_asset); } else if (path_asset.Contains(AssetBundlePkgFoldFoldName)) { string fold = path_asset; fold = fold.Replace("Assets/", ""); fold = fold.Replace(AssetBundlePkgFoldFoldName + "/", ""); fold = EditorContext.Instance.PathStreamingAssets + platform.ToString() + "/" + fold; fold = fold.Replace(file_name, ""); List <string> list_directory = null; map_fold_pkg.TryGetValue(fold, out list_directory); if (list_directory == null) { list_directory = new List <string>(); map_fold_pkg[fold] = list_directory; } list_directory.Add(path_asset); } else if (path_asset.Contains(AssetBundleLaunchFoldName)) { string fold = path_asset; fold = fold.Replace("Assets/", ""); fold = EditorContext.Instance.PathStreamingAssets + platform.ToString() + "/" + fold; fold = fold.Replace(file_name, ""); List <string> list_directory = null; map_fold_launch.TryGetValue(fold, out list_directory); if (list_directory == null) { list_directory = new List <string>(); map_fold_launch[fold] = list_directory; } list_directory.Add(path_asset); } } bool b = _pakABSingleEx(map_single_pkg, platform, build_target); if (!b) { Debug.LogError("BuildAssetBundle失败!"); return; } foreach (var i in map_fold_pkg) { List <string> list_samefold_file = i.Value; AssetBundleManifest ab_manifest = _pakABFoldEx(i.Key, list_samefold_file, build_target); if (ab_manifest == null) { Debug.LogError("BuildAssetBundle失败!"); return; } } foreach (var i in map_fold_launch) { List <string> list_samefold_file = i.Value; AssetBundleManifest ab_manifest = _pakABFoldEx(i.Key, list_samefold_file, build_target); if (ab_manifest == null) { Debug.LogError("BuildAssetBundle失败!"); return; } } ShowNotification(new GUIContent("BuildAssetBundle Finished!")); }