Esempio n. 1
0
        private static bool OnPrefabGameObjectTraverse(ObjectTraverseInfo objectInfo)
        {
#if !UNITY_2020_1_OR_NEWER
            if (currentObjectIndex % ObjectTraverseUpdateStep == 0)
#endif
            {
                if (IssuesFinder.ShowProgressBar(2, 3, itemIndex, totalItems,
                                                 string.Format("Processing prefab: {0}", currentAssetName)))
                {
                    return(false);
                }
            }

            currentObjectIndex++;

            bool skipTree;
            if (IssuesDetector.StartGameObject(objectInfo.current, objectInfo.inPrefabInstance, out skipTree))
            {
                CSTraverseTools.TraverseGameObjectComponents(objectInfo, OnComponentTraverse);
                IssuesDetector.EndGameObject(objectInfo.current);
            }
            objectInfo.skipCurrentTree = skipTree;

            return(true);
        }
Esempio n. 2
0
        private static void ProcessPrefab(AssetInfo asset, string assetName, int prefabIndex, int totalPrefabs)
        {
            currentObjectIndex = 0;

            itemIndex  = prefabIndex;
            totalItems = totalPrefabs;

            currentAssetName = assetName;

            var prefabRootGameObject = CSPrefabTools.GetPrefabAssetRoot(asset.Path);

            if (prefabRootGameObject == null)
            {
                return;
            }
            IssuesDetector.StartPrefabAsset(asset);
            CSTraverseTools.TraversePrefabGameObjects(prefabRootGameObject, true, false, OnPrefabGameObjectTraverse);
            IssuesDetector.EndPrefabAsset(asset);
        }
Esempio n. 3
0
        internal static void ProcessTargetAssets(AssetInfo[] targetAssets)
        {
            var sceneTargets  = new List <AssetInfo>();
            var prefabTargets = new List <AssetInfo>();
            var restTargets   = new List <AssetInfo>();

            foreach (var targetAsset in targetAssets)
            {
                var type = targetAsset.Type;

                if (type == CSReflectionTools.sceneAssetType)
                {
                    sceneTargets.Add(targetAsset);
                }
                else if (type == CSReflectionTools.gameObjectType)
                {
                    prefabTargets.Add(targetAsset);
                }
                else
                {
                    restTargets.Add(targetAsset);
                }
            }

            IssuesDetector.Init(currentIssuesList);
            ProcessAssetTargets(sceneTargets, ProcessScene, Phase.Scenes, "Opening scene");
            if (IssuesFinder.operationCanceled)
            {
                return;
            }
            ProcessAssetTargets(prefabTargets, ProcessPrefab, Phase.Prefabs, "Prefab");
            if (IssuesFinder.operationCanceled)
            {
                return;
            }
            ProcessAssetTargets(restTargets, ProcessAsset, Phase.Rest, "Asset");
        }
Esempio n. 4
0
        private static void ProcessAsset(AssetInfo asset, string assetName, int assetIndex, int totalAssets)
        {
            currentObjectIndex = 0;

            itemIndex  = assetIndex;
            totalItems = totalAssets;

            var assetType = asset.Type;

            if (asset.Kind == AssetKind.Settings)
            {
                IssuesDetector.ProcessSettingsAsset(asset);
            }
            else
            {
                if (assetType == null)
                {
                    if (CSAssetTools.IsAssetScriptableObjectWithMissingScript(asset.Path))
                    {
                        IssuesDetector.ProcessScriptableObject(asset, null);
                    }
                }
                else if (assetType.BaseType == CSReflectionTools.scriptableObjectType)
                {
                    var scriptableObject = AssetDatabase.LoadMainAssetAtPath(asset.Path);
                    IssuesDetector.ProcessScriptableObject(asset, scriptableObject);
                }
#if UNITY_2019_1_OR_NEWER
                else if (assetType == CSReflectionTools.shaderType)
                {
                    var shader = AssetDatabase.LoadAssetAtPath <Shader>(asset.Path);
                    IssuesDetector.ProcessShader(asset, shader);
                }
#endif
            }
        }
Esempio n. 5
0
        private static void ProcessScene(AssetInfo asset, string assetName, int sceneIndex, int totalScenes)
        {
            currentObjectIndex = 0;
            itemIndex          = sceneIndex;
            totalItems         = totalScenes;

            currentAssetName = assetName;

            var openSceneResult = CSSceneTools.OpenScene(asset.Path);

            if (!openSceneResult.success)
            {
                Debug.LogWarning(Maintainer.ConstructWarning("Can't open scene " + asset.Path));
                return;
            }

            var skipCleanPrefabInstances = ProjectSettings.Issues.scanGameObjects && ProjectSettings.Issues.lookInAssets;

            IssuesDetector.SceneStart(asset);
            CSTraverseTools.TraverseSceneGameObjects(openSceneResult.scene, skipCleanPrefabInstances, false, OnGameObjectTraverse);
            IssuesDetector.SceneEnd(asset);

            CSSceneTools.CloseOpenedSceneIfNeeded(openSceneResult);
        }
Esempio n. 6
0
        private static bool OnGameObjectTraverse(ObjectTraverseInfo objectInfo)
        {
            if (currentObjectIndex % ObjectTraverseUpdateStep == 0)
            {
                if (IssuesFinder.ShowProgressBar(1, 3, itemIndex, totalItems,
                                                 string.Format("Processing scene: {0} root {1}/{2}", currentAssetName, objectInfo.rootIndex + 1, objectInfo.TotalRoots)))
                {
                    return(false);
                }
            }

            currentObjectIndex++;

            bool skipTree;

            if (IssuesDetector.StartGameObject(objectInfo.current, objectInfo.inPrefabInstance, out skipTree))
            {
                CSTraverseTools.TraverseGameObjectComponents(objectInfo, OnComponentTraverse);
                IssuesDetector.EndGameObject(objectInfo.current);
            }
            objectInfo.skipCurrentTree = skipTree;

            return(true);
        }
Esempio n. 7
0
 private static void OnComponentTraverse(ObjectTraverseInfo objectInfo, Component component, int orderIndex)
 {
     IssuesDetector.ProcessComponent(component, orderIndex);
 }