コード例 #1
0
        private void LoadPrefs()
        {
            SceneSearchMode sceneSearchMode = (SceneSearchMode)EditorPrefs.GetInt(PREFS_SEARCH_SCENES, (int)(SceneSearchMode.OpenScenes | SceneSearchMode.ScenesInBuildSettingsTickedOnly | SceneSearchMode.AllScenes));

            searchInOpenScenes              = (sceneSearchMode & SceneSearchMode.OpenScenes) == SceneSearchMode.OpenScenes;
            searchInScenesInBuild           = (sceneSearchMode & SceneSearchMode.ScenesInBuildSettingsAll) == SceneSearchMode.ScenesInBuildSettingsAll || (sceneSearchMode & SceneSearchMode.ScenesInBuildSettingsTickedOnly) == SceneSearchMode.ScenesInBuildSettingsTickedOnly;
            searchInScenesInBuildTickedOnly = (sceneSearchMode & SceneSearchMode.ScenesInBuildSettingsAll) != SceneSearchMode.ScenesInBuildSettingsAll;
            searchInAllScenes = (sceneSearchMode & SceneSearchMode.AllScenes) == SceneSearchMode.AllScenes;

            searchInAssetsFolder = EditorPrefs.GetBool(PREFS_SEARCH_ASSETS, true);
            searchDepthLimit     = EditorPrefs.GetInt(PREFS_SEARCH_DEPTH_LIMIT, 4);

            // Fetch public, protected and private non-static fields and properties from objects by default
            fieldModifiers    = (BindingFlags)EditorPrefs.GetInt(PREFS_SEARCH_FIELDS, (int)(BindingFlags.Public | BindingFlags.NonPublic));
            propertyModifiers = (BindingFlags)EditorPrefs.GetInt(PREFS_SEARCH_PROPERTIES, (int)(BindingFlags.Public | BindingFlags.NonPublic));

            try
            {
                searchResultDrawParameters.pathDrawingMode = (PathDrawingMode)EditorPrefs.GetInt(PREFS_PATH_DRAWING_MODE, (int)PathDrawingMode.ShortRelevantParts);
            }
            catch
            {
                searchResultDrawParameters.pathDrawingMode = PathDrawingMode.ShortRelevantParts;
            }

            searchResultDrawParameters.showTooltips = EditorPrefs.GetBool(PREFS_SHOW_TOOLTIPS, false);
        }
コード例 #2
0
 private void ParseSceneSearchMode(SceneSearchMode sceneSearchMode)
 {
     searchInOpenScenes              = (sceneSearchMode & SceneSearchMode.OpenScenes) == SceneSearchMode.OpenScenes;
     searchInScenesInBuild           = (sceneSearchMode & SceneSearchMode.ScenesInBuildSettingsAll) == SceneSearchMode.ScenesInBuildSettingsAll || (sceneSearchMode & SceneSearchMode.ScenesInBuildSettingsTickedOnly) == SceneSearchMode.ScenesInBuildSettingsTickedOnly;
     searchInScenesInBuildTickedOnly = (sceneSearchMode & SceneSearchMode.ScenesInBuildSettingsAll) != SceneSearchMode.ScenesInBuildSettingsAll;
     searchInAllScenes = (sceneSearchMode & SceneSearchMode.AllScenes) == SceneSearchMode.AllScenes;
 }
コード例 #3
0
        private void SavePrefs()
        {
            SceneSearchMode sceneSearchMode = SceneSearchMode.None;

            if (searchInOpenScenes)
            {
                sceneSearchMode |= SceneSearchMode.OpenScenes;
            }
            if (searchInScenesInBuild)
            {
                sceneSearchMode |= searchInScenesInBuildTickedOnly ? SceneSearchMode.ScenesInBuildSettingsTickedOnly : SceneSearchMode.ScenesInBuildSettingsAll;
            }
            if (searchInAllScenes)
            {
                sceneSearchMode |= SceneSearchMode.AllScenes;
            }

            EditorPrefs.SetInt(PREFS_SEARCH_SCENES, (int)sceneSearchMode);
            EditorPrefs.SetBool(PREFS_SEARCH_ASSETS, searchInAssetsFolder);
            EditorPrefs.SetInt(PREFS_SEARCH_DEPTH_LIMIT, searchDepthLimit);
            EditorPrefs.SetInt(PREFS_SEARCH_FIELDS, (int)fieldModifiers);
            EditorPrefs.SetInt(PREFS_SEARCH_PROPERTIES, (int)propertyModifiers);
            EditorPrefs.SetInt(PREFS_PATH_DRAWING_MODE, (int)searchResultDrawParameters.pathDrawingMode);
            EditorPrefs.SetBool(PREFS_SHOW_TOOLTIPS, searchResultDrawParameters.showTooltips);
        }
コード例 #4
0
			public Parameters()
			{
				objectsToSearch = null;
				searchInScenes = SceneSearchMode.AllScenes;
				searchInAssetsFolder = true;
				searchInAssetsSubset = null;
				excludedAssetsFromSearch = null;
				dontSearchInSourceAssets = false;
				excludedScenesFromSearch = null;
				searchDepthLimit = 4;
				fieldModifiers = BindingFlags.Public | BindingFlags.NonPublic;
				propertyModifiers = BindingFlags.Public | BindingFlags.NonPublic;
				searchNonSerializableVariables = true;
				noAssetDatabaseChanges = false;
				showProgressBar = false;
			}
コード例 #5
0
        private SceneSearchMode GetSceneSearchMode(bool hideOptionsInPlayMode)
        {
            SceneSearchMode sceneSearchMode = SceneSearchMode.None;

            if (searchInOpenScenes)
            {
                sceneSearchMode |= SceneSearchMode.OpenScenes;
            }
            if (!hideOptionsInPlayMode || !EditorApplication.isPlaying)
            {
                if (searchInScenesInBuild)
                {
                    sceneSearchMode |= searchInScenesInBuildTickedOnly ? SceneSearchMode.ScenesInBuildSettingsTickedOnly : SceneSearchMode.ScenesInBuildSettingsAll;
                }
                if (searchInAllScenes)
                {
                    sceneSearchMode |= SceneSearchMode.AllScenes;
                }
            }

            return(sceneSearchMode);
        }
コード例 #6
0
        private void OnGUI()
        {
            // Make the window scrollable
            scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, Utilities.GL_EXPAND_WIDTH, Utilities.GL_EXPAND_HEIGHT);

            GUILayout.BeginVertical();

            GUILayout.Space(10);

            // Show the error message, if it is not empty
            if (errorMessage.Length > 0)
            {
                EditorGUILayout.HelpBox(errorMessage, MessageType.Error);
            }

            GUILayout.Space(10);

            if (currentPhase == Phase.Processing)
            {
                // If we are stuck at this phase, then we have encountered an exception
                GUILayout.Label(". . . Something went wrong, check console . . .");

                restoreInitialSceneSetup = EditorGUILayout.ToggleLeft("Restore initial scene setup (Recommended)", restoreInitialSceneSetup);

                if (GUILayout.Button("RETURN", Utilities.GL_HEIGHT_30))
                {
                    ReturnToSetupPhase(restoreInitialSceneSetup);
                }
            }
            else if (currentPhase == Phase.Setup)
            {
                if (ExposeSearchedObjects())
                {
                    errorMessage = string.Empty;
                }

                GUILayout.Space(10);

                GUILayout.Box("SEARCH IN", Utilities.BoxGUIStyle, Utilities.GL_EXPAND_WIDTH);

                searchInAssetsFolder = EditorGUILayout.ToggleLeft("Project view (Assets folder)", searchInAssetsFolder);

                if (searchInAssetsFolder)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(35);
                    GUILayout.BeginVertical();

                    ExposeAssetsToSearch();

                    GUILayout.EndVertical();
                    GUILayout.EndHorizontal();
                }

                GUILayout.Space(10);

                if (EditorApplication.isPlaying)
                {
                    searchInAllScenes     = false;
                    searchInScenesInBuild = false;
                }
                else if (searchInAllScenes)
                {
                    GUI.enabled = false;
                }

                searchInOpenScenes = EditorGUILayout.ToggleLeft("Currently open (loaded) scene(s)", searchInOpenScenes);

                if (EditorApplication.isPlaying)
                {
                    GUI.enabled = false;
                }

                searchInScenesInBuild = EditorGUILayout.ToggleLeft("Scenes in Build Settings", searchInScenesInBuild);

                if (searchInScenesInBuild)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(35);

                    searchInScenesInBuildTickedOnly = EditorGUILayout.ToggleLeft("Ticked only", searchInScenesInBuildTickedOnly, Utilities.GL_WIDTH_100);
                    searchInScenesInBuildTickedOnly = !EditorGUILayout.ToggleLeft("All", !searchInScenesInBuildTickedOnly, Utilities.GL_WIDTH_100);

                    GUILayout.EndHorizontal();
                }

                if (!EditorApplication.isPlaying)
                {
                    GUI.enabled = true;
                }

                searchInAllScenes = EditorGUILayout.ToggleLeft("All scenes in the project", searchInAllScenes);

                GUI.enabled = true;

                GUILayout.Space(10);

                GUILayout.Box("SEARCH SETTINGS", Utilities.BoxGUIStyle, Utilities.GL_EXPAND_WIDTH);

                GUILayout.BeginHorizontal();

                GUILayout.Label(new GUIContent("> Search depth: " + searchDepthLimit, "Depth limit for recursively searching variables of objects"), Utilities.GL_WIDTH_250);

                searchDepthLimit = (int)GUILayout.HorizontalSlider(searchDepthLimit, 0, 4);

                GUILayout.EndHorizontal();

                GUILayout.Label("> Search variables:");

                GUILayout.BeginHorizontal();

                GUILayout.Space(35);

                if (EditorGUILayout.ToggleLeft("Public", (fieldModifiers & BindingFlags.Public) == BindingFlags.Public, Utilities.GL_WIDTH_100))
                {
                    fieldModifiers |= BindingFlags.Public;
                }
                else
                {
                    fieldModifiers &= ~BindingFlags.Public;
                }

                if (EditorGUILayout.ToggleLeft("Non-public", (fieldModifiers & BindingFlags.NonPublic) == BindingFlags.NonPublic, Utilities.GL_WIDTH_100))
                {
                    fieldModifiers |= BindingFlags.NonPublic;
                }
                else
                {
                    fieldModifiers &= ~BindingFlags.NonPublic;
                }

                GUILayout.EndHorizontal();

                GUILayout.Label("> Search properties (can be slow):");

                GUILayout.BeginHorizontal();

                GUILayout.Space(35);

                if (EditorGUILayout.ToggleLeft("Public", (propertyModifiers & BindingFlags.Public) == BindingFlags.Public, Utilities.GL_WIDTH_100))
                {
                    propertyModifiers |= BindingFlags.Public;
                }
                else
                {
                    propertyModifiers &= ~BindingFlags.Public;
                }

                if (EditorGUILayout.ToggleLeft("Non-public", (propertyModifiers & BindingFlags.NonPublic) == BindingFlags.NonPublic, Utilities.GL_WIDTH_100))
                {
                    propertyModifiers |= BindingFlags.NonPublic;
                }
                else
                {
                    propertyModifiers &= ~BindingFlags.NonPublic;
                }

                GUILayout.EndHorizontal();

                GUILayout.Space(10);

                // Don't let the user press the GO button without any valid search location
                if (!searchInAllScenes && !searchInOpenScenes && !searchInScenesInBuild && !searchInAssetsFolder)
                {
                    GUI.enabled = false;
                }

                noAssetDatabaseChanges = EditorGUILayout.ToggleLeft("I haven't modified any assets/scenes since the last search (faster search)", noAssetDatabaseChanges);

                if (GUILayout.Button("GO!", Utilities.GL_HEIGHT_30))
                {
                    if (objectsToSearch.IsEmpty())
                    {
                        errorMessage = "ADD AN ASSET TO THE LIST FIRST!";
                    }
                    else if (!EditorApplication.isPlaying && !Utilities.AreScenesSaved())
                    {
                        // Don't start the search if at least one scene is currently dirty (not saved)
                        errorMessage = "SAVE OPEN SCENES FIRST!";
                    }
                    else
                    {
                        errorMessage = string.Empty;
                        currentPhase = Phase.Processing;

                        SceneSearchMode sceneSearchMode = SceneSearchMode.None;
                        if (searchInAllScenes)
                        {
                            sceneSearchMode = SceneSearchMode.AllScenes;
                        }
                        else
                        {
                            if (searchInOpenScenes)
                            {
                                sceneSearchMode = SceneSearchMode.OpenScenes;
                            }

                            if (searchInScenesInBuild)
                            {
                                if (searchInScenesInBuildTickedOnly)
                                {
                                    sceneSearchMode |= SceneSearchMode.ScenesInBuildSettingsTickedOnly;
                                }
                                else
                                {
                                    sceneSearchMode |= SceneSearchMode.ScenesInBuildSettingsAll;
                                }
                            }
                        }

                        // Start searching
                        searchResult = core.Run(new AssetUsageDetector.Parameters()
                        {
                            objectsToSearch        = !objectsToSearch.IsEmpty() ? new ObjectToSearchEnumerator(objectsToSearch) : null,
                            searchInScenes         = sceneSearchMode,
                            searchInAssetsFolder   = searchInAssetsFolder,
                            searchInAssetsSubset   = !searchInAssetsSubset.IsEmpty() ? searchInAssetsSubset : null,
                            fieldModifiers         = fieldModifiers,
                            propertyModifiers      = propertyModifiers,
                            searchDepthLimit       = searchDepthLimit,
                            noAssetDatabaseChanges = noAssetDatabaseChanges
                        });

                        currentPhase = Phase.Complete;
                    }
                }
            }
            else if (currentPhase == Phase.Complete)
            {
                // Draw the results of the search
                GUI.enabled = false;

                ExposeSearchedObjects();

                GUILayout.Space(10);
                GUI.enabled = true;

                restoreInitialSceneSetup = EditorGUILayout.ToggleLeft("Restore initial scene setup after search is reset (Recommended)", restoreInitialSceneSetup);

                if (GUILayout.Button("Reset Search", Utilities.GL_HEIGHT_30))
                {
                    ReturnToSetupPhase(restoreInitialSceneSetup);
                }

                if (searchResult == null)
                {
                    EditorGUILayout.HelpBox("ERROR: searchResult is null", MessageType.Error);
                    return;
                }
                else if (!searchResult.SearchCompletedSuccessfully)
                {
                    EditorGUILayout.HelpBox("ERROR: search was interrupted, check the logs for more info", MessageType.Error);
                }

                Color c = GUI.color;
                GUI.color = Color.green;
                GUILayout.Box("Don't forget to save scene(s) if you made any changes!", Utilities.BoxGUIStyle, Utilities.GL_EXPAND_WIDTH);
                GUI.color = c;

                GUILayout.Space(10);

                if (searchResult.NumberOfGroups == 0)
                {
                    GUILayout.Box("No results found...", Utilities.BoxGUIStyle, Utilities.GL_EXPAND_WIDTH);
                }
                else
                {
                    GUILayout.BeginHorizontal();

                    // Select all the references after filtering them (select only the GameObject's)
                    if (GUILayout.Button("Select All\n(GameObject-wise)", Utilities.GL_HEIGHT_35))
                    {
                        GameObject[] objects = searchResult.SelectAllAsGameObjects();
                        if (objects != null && objects.Length > 0)
                        {
                            Selection.objects = objects;
                        }
                    }

                    // Select all the references without filtering them
                    if (GUILayout.Button("Select All\n(Object-wise)", Utilities.GL_HEIGHT_35))
                    {
                        Object[] objects = searchResult.SelectAllAsObjects();
                        if (objects != null && objects.Length > 0)
                        {
                            Selection.objects = objects;
                        }
                    }

                    GUILayout.EndHorizontal();

                    GUILayout.Space(10);

                    searchResultDrawParameters.showTooltips = EditorGUILayout.ToggleLeft("Show tooltips", searchResultDrawParameters.showTooltips);

                    GUILayout.Space(10);

                    GUILayout.Label("Path drawing mode:");

                    GUILayout.BeginHorizontal();

                    GUILayout.Space(35);

                    if (EditorGUILayout.ToggleLeft("Full: Draw the complete paths to the references (can be slow with too many references)", searchResultDrawParameters.pathDrawingMode == PathDrawingMode.Full))
                    {
                        searchResultDrawParameters.pathDrawingMode = PathDrawingMode.Full;
                    }

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();

                    GUILayout.Space(35);

                    if (EditorGUILayout.ToggleLeft("Shorter: Draw only the most relevant unique parts of the complete paths that start with a UnityEngine.Object", searchResultDrawParameters.pathDrawingMode == PathDrawingMode.ShortRelevantParts))
                    {
                        searchResultDrawParameters.pathDrawingMode = PathDrawingMode.ShortRelevantParts;
                    }

                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();

                    GUILayout.Space(35);

                    if (EditorGUILayout.ToggleLeft("Shortest: Draw only the last two nodes of complete paths that are unique", searchResultDrawParameters.pathDrawingMode == PathDrawingMode.Shortest))
                    {
                        searchResultDrawParameters.pathDrawingMode = PathDrawingMode.Shortest;
                    }

                    GUILayout.EndHorizontal();

                    searchResult.DrawOnGUI(searchResultDrawParameters);
                }
            }

            GUILayout.Space(10);

            GUILayout.EndVertical();

            EditorGUILayout.EndScrollView();
        }
コード例 #7
0
        public void RefreshSearchResultGroup(SearchResultGroup searchResultGroup, bool noAssetDatabaseChanges)
        {
            if (searchResultGroup == null)
            {
                Debug.LogError("SearchResultGroup is null!");
                return;
            }

            int searchResultGroupIndex = -1;

            for (int i = 0; i < result.Count; i++)
            {
                if (result[i] == searchResultGroup)
                {
                    searchResultGroupIndex = i;
                    break;
                }
            }

            if (searchResultGroupIndex < 0)
            {
                Debug.LogError("SearchResultGroup is not a part of SearchResult!");
                return;
            }

            if (searchResultGroup.Type == SearchResultGroup.GroupType.Scene && EditorApplication.isPlaying && !EditorSceneManager.GetSceneByPath(searchResultGroup.Title).isLoaded)
            {
                Debug.LogError("Can't search unloaded scene while in Play Mode!");
                return;
            }

            if (searchHandler == null)
            {
                searchHandler = new AssetUsageDetector();
            }

            SceneSearchMode searchInScenes = m_searchParameters.searchInScenes;

            Object[] searchInScenesSubset = m_searchParameters.searchInScenesSubset;
            bool     searchInAssetsFolder = m_searchParameters.searchInAssetsFolder;

            Object[] searchInAssetsSubset = m_searchParameters.searchInAssetsSubset;

            try
            {
                if (searchResultGroup.Type == SearchResultGroup.GroupType.Assets)
                {
                    m_searchParameters.searchInScenes       = SceneSearchMode.None;
                    m_searchParameters.searchInScenesSubset = null;
                }
                else if (searchResultGroup.Type == SearchResultGroup.GroupType.Scene)
                {
                    m_searchParameters.searchInScenes       = SceneSearchMode.None;
                    m_searchParameters.searchInScenesSubset = new Object[1] {
                        AssetDatabase.LoadAssetAtPath <SceneAsset>(searchResultGroup.Title)
                    };
                    m_searchParameters.searchInAssetsFolder = false;
                    m_searchParameters.searchInAssetsSubset = null;
                }
                else
                {
                    m_searchParameters.searchInScenes       = (SceneSearchMode)1024;                // A unique value to search only the DontDestroyOnLoad scene
                    m_searchParameters.searchInScenesSubset = null;
                    m_searchParameters.searchInAssetsFolder = false;
                    m_searchParameters.searchInAssetsSubset = null;
                }

                m_searchParameters.lazySceneSearch        = false;
                m_searchParameters.noAssetDatabaseChanges = noAssetDatabaseChanges;

                // Make sure the AssetDatabase is up-to-date
                AssetDatabase.SaveAssets();

                List <SearchResultGroup> searchResult = searchHandler.Run(m_searchParameters).result;
                if (searchResult != null)
                {
                    int newSearchResultGroupIndex = -1;
                    for (int i = 0; i < searchResult.Count; i++)
                    {
                        if (searchResultGroup.Title == searchResult[i].Title)
                        {
                            newSearchResultGroupIndex = i;
                            break;
                        }
                    }

                    if (newSearchResultGroupIndex >= 0)
                    {
                        result[searchResultGroupIndex] = searchResult[newSearchResultGroupIndex];
                    }
                    else
                    {
                        searchResultGroup.Clear();
                    }
                }
            }
            finally
            {
                m_searchParameters.searchInScenes       = searchInScenes;
                m_searchParameters.searchInScenesSubset = searchInScenesSubset;
                m_searchParameters.searchInAssetsFolder = searchInAssetsFolder;
                m_searchParameters.searchInAssetsSubset = searchInAssetsSubset;
            }
        }