Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }
Beispiel #3
0
        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);
        }