本日はUnityの小ネタ枠です。
Questアプリでメニューボタンでウィンドウが開いたことを検知する方法についてです。
OnApplicationFocus
OnApplicationFocusmメソッドはアプリがフォーカスを取得またはロストしたときに呼び出されます。
本メソッドはMonoBehaviourで実装された全てのスクリプトで機能します。
docs.unity3d.com
Questアプリではプレイヤーがメニューボタンでウィンドウを開くとフォーカスをロストします。
このため、OnApplicationFocusmメソッドを使ってウィンドウが開いたことを検知できます。
サンプルスクリプト
以下の別ウィンドウが開かれたときにメッセージを通知するサンプルスクリプトを作成しました。
・FocusExitCheck.cs
using TMPro; using UnityEngine; public class FocusExitCheck : MonoBehaviour { [SerializeField] private TMP_Text messageText; /// <summary> /// フォーカス変更時のイベント /// </summary> /// <param name="focus"></param> private void OnApplicationFocus(bool focus) { // フォーカスを失ったときにメッセージを表示する if (focus == false) { messageText.text = "別ウィンドウが開かれました"; } } }
シーン内の任意のゲームオブジェクトにスクリプトを設定し、テキストへの参照を設定します。
これで準備は完了です。プロジェクトのビルドとQuest3へのデプロイを実行します。
アプリ内でコントローラのQuestボタンを押下してメニューウィンドウを開いてみます。
以下の通りウィンドウを開いた時点でフォーカス変更のイベントが検知されてメッセージが書き換わっています。
Tips
アプリを終了するApplication.Quit()と組み合わせると、別ウィンドウを開くと同時にアプリを終了することも可能です。
using TMPro; using UnityEngine; public class FocusExitCheck : MonoBehaviour { [SerializeField] private TMP_Text messageText; /// <summary> /// フォーカス変更時のイベント /// </summary> /// <param name="focus"></param> private void OnApplicationFocus(bool focus) { // フォーカスを失ったときにアプリを終了する if (focus == false) { Application.Quit(); } } }