/// <summary> /// 导入项目的Assets文件夹,并修改.cs文件解决冲突 /// </summary> /// <param name="path">需要导入Assets文件夹的项目路径</param> /// <param name="currentProjectTempPath">临时文件夹</param> /// <param name="projectName">需要导入项目名称</param> public override void Import(string path, string currentProjectTempPath, string projectName) { //当前项目的Assets文件夹的全路径,路径中使用"/"分隔,不是"\"。 string assetsPath = Application.dataPath; //备份当前项目的所有GUID用于判断是否重复 string[] oldGuidList = GuidUtil.GetAllMetaFileGuidList(assetsPath, true); //创建子项目目录,如果目录存在则先删除 string childProjectPath = assetsPath + "/" + projectName; FileUtil2.CreateDirectory(childProjectPath, true); EditorUtility.ClearProgressBar(); //子项目Assets目录 string childProjectAssetsPath = childProjectPath + "/Assets"; //复制项目的Assets文件夹到子项目路径 FileUtil2.CopyDirectory(path + "/Assets", childProjectAssetsPath); //删除DOTweenSettings.asset DeleteDOTweenSettingsAsset(childProjectAssetsPath); //删除不需要导入的文件夹,如Editor、Gizmos、Plugins等 ForeachAndDeleteIgnoreFolders(childProjectAssetsPath); //修改文件夹下的.cs文件解决冲突 ForeachAndEditCSharpFiles(childProjectAssetsPath, projectName); //修改文件夹下的.unity文件,修正SortingLayer等 ForeachAndEditUnityFiles(childProjectAssetsPath, projectName); //修改冲突的GUID ForeachAndEditGuids(childProjectAssetsPath, oldGuidList); }
/// <summary> /// 导入一个项目的Assets文件夹和ProjectSettings /// </summary> /// <param name="path">项目的路径位置</param> /// <param name="isImportAssets">是否导入Assets文件夹</param> /// <param name="isImportBuildSettings">是否导入BuildSettings</param> /// <param name="projectName">导入进来的文件夹名;项目中的所有设置文件的名称前缀,null时将从path的最后截取</param> /// <param name="isDeleteBuildSettingsScenes">导入前是否清除由projectName指定的项目在上一次导入时在BuildSettings窗口中的场景</param> /// <param name="isDeleteAssets">导入前是否清除由projectName指定的项目在上一次导入时的资源文件夹</param> public static void ImportProject(string path, bool isImportAssets = true, bool isImportBuildSettings = true, string projectName = null, bool isDeleteBuildSettingsScenes = true, bool isDeleteAssets = true) { if (projectName == null) { projectName = path.Substring(path.LastIndexOf('/') + 1); } //删除指定项目的所有资源和设置,用于重复导入时清空上一次导入的资源和设置 DeleteProject(projectName, isDeleteBuildSettingsScenes, isDeleteAssets); //创建临时文件夹,如果文件夹存在则先删除 FileUtil2.CreateDirectory(projectImporterTempPath, true); //导入tags和Layers var tagsAndLayersImporter = new TagsAndLayersImporter(); tagsAndLayersImporter.Import(path, currentProjectTempPath, projectName); if (isImportAssets) { //导入Assets文件夹,并修改.cs文件解决冲突,必须在导入tags和Layers之后执行 var assetsImporter = new AssetsImporter(); assetsImporter.Import(path, currentProjectTempPath, projectName); } //导入Time var timeImporter = new TimeImporter(); timeImporter.Import(path, currentProjectTempPath, projectName); //导入Physics var physicsImporter = new PhysicsImporter(); physicsImporter.Import(path, currentProjectTempPath, projectName); //导入Physics2D var physics2DImporter = new Physics2DImporter(); physics2DImporter.Import(path, currentProjectTempPath, projectName); //导入Quality var qualityImporter = new QualityImporter(); qualityImporter.Import(path, currentProjectTempPath, projectName); if (isImportBuildSettings) { //导入BuildSettings var buildSettingsImporter = new BuildSettingsImporter(); buildSettingsImporter.Import(path, currentProjectTempPath, projectName); } //所有事情完成,删除"ProjectImporter/temp"临时文件夹 AssetDatabase.DeleteAsset(projectImporterTempPath); }