Unityエディタがバックグラウンドに行ったこと・戻ってきたことを検知する方法についてまとめました。
Unity 2020.1.17f1
はじめに
本記事では、Unityエディタから他のアプリケーションにフォーカスを移動し、
Unityエディタがバックグラウンドに行ったこと、またそこから復帰したことを検知する方法についてまとめます。
Unityエディタがバックグラウンドに行ったこと・戻ってきたことを検知する
UnityEditorがフォアグラウンドかどうかはUnityEditorInternal.InternalEditorUtility.isApplicationActive
で取得できます。
今回はこれが切り替わったタイミングを検知したいので、EditorApplication.update
を使ってこれを監視します。
using UnityEditor; using UnityEditorInternal; using UnityEngine; public static class Example { private static bool _isUnityEditorFocused; [InitializeOnLoadMethod] private static void InitializeOnLoad() { EditorApplication.update += OnUpdate; } private static void OnUpdate() { if (!_isUnityEditorFocused && InternalEditorUtility.isApplicationActive) { _isUnityEditorFocused = InternalEditorUtility.isApplicationActive; OnUnityEditorFocused(); } else if (_isUnityEditorFocused && !InternalEditorUtility.isApplicationActive) { _isUnityEditorFocused = InternalEditorUtility.isApplicationActive; OnUnityEditorUnfocused(); } } private static void OnUnityEditorFocused() { Debug.Log($"{nameof(OnUnityEditorFocused)}"); } private static void OnUnityEditorUnfocused() { Debug.Log($"{nameof(OnUnityEditorUnfocused)}"); } }
これでUnityエディタがバックグラウンドに行ったこと・戻ってきたことを検知できました。
なお本記事ではInitializeOnLoadMethod
アトリビュートを使用していますが、InitializeOnLoad
を使って実装することも可能です。