本日は Unity の小ネタ枠です。
UnityでOnApplicationPauseを使ってアプリケーションのフォーカス時の処理を行う方法についてです。
OnApplicationFocus
アプリケーションがフォーカスを取得、または、失ったときに、すべてのゲームオブジェクトに送信されます。
フォーカスがアプリケーションに戻ったときはステータスに true が渡され、外れるときに false が渡されます。
OnApplicationFocus は yield ステートメントを使ってコルーチンにすることができます。
この場合、初期フレーム内で早期通知と通常の更新ステップの2回評価されます。
docs.unity3d.com
注意:UnityEditor の場合、OnApplicationFocus は[Game]ビューがフォーカスを失ったり戻ったりしたときに呼ばれます。
外部アプリケーション(Unity以外のアプリケーション)にフォーカスがあるとき、[Game]ビュー以外のタブをクリックすると、1フレームで2回 OnApplicationFocus が呼び出されます。
1回目は Unity がフォーカスを取り戻すと[Game]ビューもフォーカスを取り戻すため、引数を true に設定して OnApplicationFocus を呼び出します。
2回目は[Game]ビューがクリックされたタブにフォーカスを奪われるため、引数を false に設定して OnApplicationFocusが 呼び出されます。
サンプルコード
エディター上でフォーカス変化時の動作を確認する以下のサンプルコードを用意しました。
・OnApplicationFocusTest.cs
using UnityEngine; public class OnApplicationFocusTest : MonoBehaviour { void OnApplicationFocus(bool focusStatus) { Debug.Log($"Check OnApplicationFocus : {focusStatus}"); } }
サンプルシーン起動時、[Game]ビューにフォーカスが映るので引数 True で OnApplicationFocus が呼び出されます。
この後、Unity 以外のアプリケーションを選択してフォーカスを外すと引数 False で OnApplicationFocus が呼び出されます。
次に[Game]ビューを再び選択した場合と、Unity の[Game]ビュー以外の部分を選択した場合です。
[Game]ビューを再び選択した場合は引数 True で OnApplicationFocus が呼び出されます。
Unity の[Game]ビュー以外の部分を選択した場合は前述の注意事項の通り、引数 True と False の2回 OnApplicationFocus が呼び出されます。