private void Execute(StrippingStep step) { // First, verify... foreach (var srcPath in step.files) { if (!File.Exists(srcPath) && !Directory.Exists(srcPath)) { throw new InvalidOperationException("The file or directory at path " + srcPath + " is in the worklist but missing on disk."); } } // Now execute foreach (var srcPath in step.files) { var targetPath = Path.Combine(_backupAreaRoot, srcPath); var parentPath = Path.GetDirectoryName(targetPath); Directory.CreateDirectory(parentPath); FileUtil.MoveFileOrDirectory(srcPath, targetPath); // Remove moved directories if (srcPath.EndsWith(".meta")) { var dataPath = AssetDatabase.GetAssetPathFromTextMetaFilePath(srcPath); if (Directory.Exists(dataPath)) { Directory.Delete(dataPath); } } } }
private void Unexecute(StrippingStep step) { foreach (var srcPath in step.files) { var targetPath = Path.Combine(_backupAreaRoot, srcPath); var parentPath = Path.GetDirectoryName(srcPath); Directory.CreateDirectory(parentPath); FileUtil.MoveFileOrDirectory(targetPath, srcPath); // Deal with empty directories if (srcPath.EndsWith(".meta")) { var dataPath = AssetDatabase.GetAssetPathFromTextMetaFilePath(srcPath); if (!File.Exists(dataPath) && !Directory.Exists(dataPath)) { Directory.CreateDirectory(dataPath); } } } }
private StrippingStep BuildStrippingStep(string path, StrippingOperationType operation) { var result = new StrippingStep(); result.rootPath = path; result.operation = operation; switch (operation) { case StrippingOperationType.StripAll: { CollectWorkFromPath(result.files, path); break; } case StrippingOperationType.StripTextures: { CollectWorkByAssetType <Texture> (result.files, path); break; } case StrippingOperationType.StripModels: { CollectWorkByAssetType(result.files, path, "Model"); break; } case StrippingOperationType.StripMaterials: { CollectWorkByAssetType <Material> (result.files, path); break; } case StrippingOperationType.StripAudio: { CollectWorkByAssetType <AudioClip> (result.files, path); break; } case StrippingOperationType.StripShaders: { CollectWorkByAssetType <Shader> (result.files, path); break; } case StrippingOperationType.StripArtNotInSceneView: { CollectWorkByAssetType <Texture> (result.files, path); CollectWorkByAssetType(result.files, path, "Model"); CollectWorkByAssetType <Material> (result.files, path); CollectWorkByAssetType <Shader> (result.files, path); HashSet <Renderer> visibleRenderers = new HashSet <Renderer> (); foreach (var camera in SceneView.GetAllSceneCameras()) { CollectVisibleRenderersToCamera(camera, visibleRenderers); } var exclusionList = new HashSet <string>(); CollectAssetsUsedByRenderers(visibleRenderers, exclusionList); // Also collect cookies from any lights in the scene, and cubemaps from any reflection probes CollectPathsForObjects(FindObjectsOfType <Light>() .Where(l => l.enabled && l.gameObject.activeInHierarchy && l.cookie) .Select(l => l.cookie), exclusionList); foreach (var p in FindObjectsOfType <ReflectionProbe>()) { CollectPathForObject(p.bakedTexture, exclusionList); CollectPathForObject(p.customBakedTexture, exclusionList); } RemovePathsAndMetas(result.files, exclusionList); break; } case StrippingOperationType.StripArtNotInLoadedScenes: { CollectWorkByAssetType <Texture> (result.files, path); CollectWorkByAssetType(result.files, path, "Model"); CollectWorkByAssetType <Material> (result.files, path); CollectWorkByAssetType <Shader> (result.files, path); var scenePaths = UnityEditor.SceneManagement.EditorSceneManager.GetAllScenes().Where(s => s.isLoaded).Select(s => s.path).ToArray(); var assets = new HashSet <string>(AssetDatabase.GetDependencies(scenePaths, true)); RemovePathsAndMetas(result.files, assets); break; } default: throw new ArgumentOutOfRangeException("operation"); } return(result); }