【Unity】【エディタ】Unityエディタがバックグラウンドに行ったこと・戻ってきたことを検知する

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を使って実装することも可能です。

参考

docs.unity3d.com

docs.unity3d.com