Exemple #1
0
        /// <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);
        }