MRが楽しい

MRやVRについて学習したことを書き残す

Questアプリ内でブラウザの閉じ開きを検知する

本日はMetaQuest3の小ネタ枠です。
Questアプリ内でブラウザの閉じ開きを検知する方法です。

Questアプリ内でブラウザを開く

Questアプリ内でブラウザを開く方法については以下の記事を参照ください。
bluebirdofoz.hatenablog.com

ブラウザの閉じ開きを検知する

ブラウザの閉じ開きを検知するには OnApplicationFocus(bool) 関数が利用できます。
本関数はアプリケーションのフォーカスが外れた、または取得された場合に状態が通知されます。
docs.unity3d.com

ブラウザを開くと false が通知され、ブラウザを閉じると true が通知されます。
また、ブラウザを開いたタイミングで OnApplicationPause(bool) 関数にも通知が発生しますが、こちらは閉じたタイミングを検知できません。
docs.unity3d.com

サンプルスクリプト

アプリケーションのフォーカスの変化と一時停止を検知して、テキストメッセージに表示する以下のサンプルスクリプトを作成しました。
・PauseTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class PauseTest : MonoBehaviour
{
    /// <summary>
    /// 出力用テキストフィールド
    /// </summary>
    [SerializeField]
    private TMP_Text p_text;

    /// <summary>
    /// 起動時処理
    /// </summary>
    private void Start()
    {
        if (p_text != null) p_text.text = "";

        string text = "Start";
        message(text);
    }

    /// <summary>
    /// フォーカスの検出
    /// </summary>
    /// <param name="focus"></param>
    private void OnApplicationFocus(bool focus)
    {
        string text = "OnApplicationFocus:" + focus;
        message(text);
    }

    /// <summary>
    /// 一時停止の検出
    /// </summary>
    /// <param name="pause"></param>
    private void OnApplicationPause(bool pause)
    {
        string text = "OnApplicationPause:" + pause;
        message(text);
    }

    /// <summary>
    /// メッセージ出力
    /// </summary>
    /// <param name="text"></param>
    private void message(string text)
    {
        if (p_text != null)
        {
            // 発生時刻と共にテキストフィールドに文字を出力
            p_text.text += text;
            p_text.text += System.DateTime.Now.ToString(" hh:mm:ss");
            p_text.text += System.Environment.NewLine;
        }
    }
}

前述の記事の手順でブラウザを開くボタンを配置したシーンにテキストパネルを作成し、コンポーネントを設定します。

動作確認

MetaQuest3でデプロイしたアプリを起動し、ブラウザを開くボタンを押下します。

ブラウザが開かれたタイミングで一瞬アプリの一時停止が走り OnApplicationPause に True/False の通知が行われます。
また、フォーカスが外れるため OnApplicationFocus に false の通知が行われるログが確認できます。

ブラウザの[終了]ボタンを押してブラウザを閉じます。

するとアプリにフォーカスが戻り OnApplicationFocus に true が通知されます。
これでQuestアプリでブラウザの閉じ開きを検知することができました。