diff --git a/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs b/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs new file mode 100644 index 0000000..3833962 --- /dev/null +++ b/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs @@ -0,0 +1,26 @@ +using Game.NavigationTool.Editor.Tools; +using UnityEditor; +using UnityEngine.SceneManagement; + +namespace Game.NavigationTool.Editor.Toolbar +{ + [InitializeOnLoad] + internal static class ToolScenePickerEditorStateChanged + { + static ToolScenePickerEditorStateChanged() + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + SceneManager.activeSceneChanged += OnActiveSceneChanged; + } + + private static void OnPlayModeStateChanged(PlayModeStateChange state) + { + ToolScenePicker.SetAsDirty(); + } + + private static void OnActiveSceneChanged(Scene current, Scene next) + { + ToolScenePicker.SetAsDirty(); + } + } +} \ No newline at end of file diff --git a/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs.meta b/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs.meta new file mode 100644 index 0000000..ef22bd1 --- /dev/null +++ b/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0590255ee6fc4b03ac5f1905d7249291 +timeCreated: 1630787305 \ No newline at end of file diff --git a/Editor/Toolbar/Tools/ToolUICanvasPicker.cs b/Editor/Toolbar/Tools/ToolUICanvasPicker.cs index e061d07..7015412 100644 --- a/Editor/Toolbar/Tools/ToolUICanvasPicker.cs +++ b/Editor/Toolbar/Tools/ToolUICanvasPicker.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using JetBrains.Annotations; using UnityEditor; +using UnityEditor.Experimental.SceneManagement; using UnityEditorInternal; using UnityEngine; using UTools = UnityEditor.Tools; @@ -22,7 +23,9 @@ namespace Game.NavigationTool.Editor.Tools if (!IS_DIRTY) return; - Canvas[] canvases = Object.FindObjectsOfType(); + PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + Canvas[] canvases = prefabStage != null ? prefabStage.prefabContentsRoot.GetComponentsInParent() : Object.FindObjectsOfType(); + var list = new List(canvases.Length); var listNames = new List(canvases.Length); var listIds = new List(canvases.Length); @@ -65,10 +68,10 @@ namespace Game.NavigationTool.Editor.Tools { return 100.0f; } - + private static void Focus(int instanceId) { - var obj = EditorUtility.InstanceIDToObject(instanceId); + Object obj = EditorUtility.InstanceIDToObject(instanceId); var canvas = obj as Canvas; if (canvas == null) diff --git a/Editor/Toolbar/Tools/ToolUICanvasPickerPostProcess.cs b/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs similarity index 66% rename from Editor/Toolbar/Tools/ToolUICanvasPickerPostProcess.cs rename to Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs index a3edf57..74de7be 100644 --- a/Editor/Toolbar/Tools/ToolUICanvasPickerPostProcess.cs +++ b/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs @@ -1,5 +1,6 @@ using Game.NavigationTool.Editor.Tools; using UnityEditor; +using UnityEditor.Experimental.SceneManagement; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; @@ -10,13 +11,12 @@ namespace Game.NavigationTool.Editor.Toolbar { static ToolUICanvasPickerPostProcess() { - EditorSceneManager.sceneSaved -= OnSceneSaved; - EditorSceneManager.sceneOpened -= OnSceneOpened; - EditorSceneManager.sceneClosed -= OnSceneClosed; - EditorSceneManager.sceneSaved += OnSceneSaved; EditorSceneManager.sceneOpened += OnSceneOpened; EditorSceneManager.sceneClosed += OnSceneClosed; + + PrefabStage.prefabStageOpened += OnPrefabStageOpened; + PrefabStage.prefabStageClosing += OnPrefabStageClosing; } private static void OnSceneSaved(Scene scene) @@ -33,5 +33,15 @@ namespace Game.NavigationTool.Editor.Toolbar { ToolUICanvasPicker.SetAsDirty(); } + + private static void OnPrefabStageOpened(PrefabStage stage) + { + ToolUICanvasPicker.SetAsDirty(); + } + + private static void OnPrefabStageClosing(PrefabStage stage) + { + ToolUICanvasPicker.SetAsDirty(); + } } } \ No newline at end of file diff --git a/Editor/Toolbar/Tools/ToolUICanvasPickerPostProcess.cs.meta b/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs.meta similarity index 100% rename from Editor/Toolbar/Tools/ToolUICanvasPickerPostProcess.cs.meta rename to Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs.meta diff --git a/package.json b/package.json index 1346f3a..3db9cb8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.module.navigationtool", - "version": "0.6.5", + "version": "0.6.6", "displayName": "Module.NavigationTool", "description": "Support for navigation tools, like favorites, history and toolbars", "unity": "2019.2",