### hasFocus может быть ненадёжным! Метод `hasFocus` возвращает true, когда открывается EditorWindow (кастомное окно) поверх редактора Unity, хотя по факту должен вернуть false. ##### Объяснение **`sceneView.hasFocus` может быть ненадежным** в ситуациях, когда окно сцены перекрыто другим окном редактора, особенно если это кастомное окно `EditorWindow`. если поверх окна сцены (`SceneView`) открыто другое окно Unity, такое как кастомное `EditorWindow`, то свойство `sceneView.hasFocus` **должно** вернуть `false`, поскольку фокус перешел на другое окно. Однако, на практике, `sceneView.hasFocus` иногда может не обновляться корректно, особенно если открыто окно внутри редактора Unity. Это может привести к ситуации, когда окно сцены остается "сфокусированным" по данным этого свойства, даже если фактически фокус перешел на другое окно. Вот несколько возможных причин, почему `sceneView.hasFocus` может вести себя некорректно: - Unity не всегда мгновенно обрабатывает потерю фокуса при открытии других окон в редакторе. - Окна внутри редактора Unity могут вести себя по-разному в зависимости от контекста, и система событий в Unity не всегда синхронизирована с состоянием UI-элементов. Пример кода: ```csharp // Метод, который будет вызван каждый раз при рендеринге окна сцены private void OnSceneGUI(SceneView sceneView) { // hasFocus возвращает true, когда открывается EditorWindow (кастомное окно) поверх редактора Unity, хотя по факту должен вернуть false. if (!sceneView.hasFocus) { Debug.Log("Окно сцены потеряло фокус"); _isSpacePressed = false; } } ``` ### Альтернатива ```csharp // Метод для проверки фокуса на окне сцены (SceneView) private void CheckFocus() { // Проверяем текущее активное окно if (EditorWindow.focusedWindow != null && EditorWindow.focusedWindow is SceneView) { if (!_wasSceneFocused) { Debug.Log("Окно сцены получило фокус"); _wasSceneFocused = true; } } else { // Сбрасываем состояние, если фокус потерян if (_wasSceneFocused) { Debug.Log("Окно сцены потеряло фокус"); _wasSceneFocused = false; } } } ```