以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/06/16/231908より取得しました。


MetaQuestでアプリ終了時に呼び出し元のアプリを呼び戻す

本日はMetaQuestの小ネタ枠です。
Questアプリで閉じるボタン押下時に終了処理を実行する方法についてです。

Questアプリの閉じるボタン押下時の動作

Questアプリはメニューパネルの[閉じる]ボタンを押下したとき、内部的にはポーズ処理でアプリを抜けます。
このため、OnApplicationQuitは呼び出されません。
bluebirdofoz.hatenablog.com

代わりにポーズ状態の変化を検知してOnApplicationPauseが呼び出されます。
bluebirdofoz.hatenablog.com

閉じるボタン押下時に終了処理を実行する

閉じるボタン押下時にアプリの終了処理を呼び出したい場合はポーズ状態の変化を検知してApplication.Quitでアプリを終了します。
docs.unity3d.com

以下のサンプルスクリプトを作成しました。

  • フォーカスが外れるかつポーズ状態に移行した場合、閉じるボタンが押下されたと判定してアプリを終了します。
  • OnApplicationQuitが呼び出されたときにドキュメントフォルダにログを出力します。
using System.Threading.Tasks;
using UnityEngine;

public class QuestAppQuit : MonoBehaviour
{
#if UNITY_ANDROID
    /// <summary>
    /// アプリ終了(OnApplicationQuit)が発生した際にドキュメントフォルダにログを出力する
    /// </summary>
    private void OnApplicationQuit()
    {
        string documentFolderPath = GetDocumentFolderPathPerAndroid29();
        string logFilePath = System.IO.Path.Combine(documentFolderPath, "OnApplicationQuitLog.txt");
        string exitTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        string logText = $"OnApplicationQuit: {exitTime}\n";
        try
        {
            // ドキュメントフォルダにログを出力
            System.IO.File.AppendAllText(logFilePath, logText);
        }
        catch (System.Exception e)
        {
            Debug.LogError("Failed to write exit log: " + e.Message);
        }
    }

    /// <summary>
    /// 現在のアプリケーションのフォーカス状態(OnApplicationFocus)とぽーズ状態(OnApplicationPause)を参照して
    /// [閉じる]ボタンが押されたときにアプリケーションを終了する
    /// </summary>
    private void ControlAppQuit()
    {
        // フォーカスが外れていて、ポーズ状態の場合はアプリケーションを終了する
        if (!m_IsFocused && m_IsPaused)
        {
            Debug.Log("Application is quitting due to focus and pause state.");
            Application.Quit();
        }
    }

    // 現在のアプリケーションのフォーカス状態(OnApplicationFocus)
    private bool m_IsFocused = true;

    /// <summary>
    /// フォーカスの状態変化(OnApplicationFocus)が発生した際にドキュメントフォルダにログを出力する
    /// フォーカスが当たったときはtrue、フォーカスが外れたときはfalse
    /// </summary>
    private void OnApplicationFocus(bool focus)
    {
        m_IsFocused = focus;

        // アプリケーションの終了を行うかどうかを制御する
        ControlAppQuit();
    }

    // 現在のアプリケーションのポーズ状態(OnApplicationPause)
    private bool m_IsPaused = false;

    /// <summary>
    /// アプリポーズ(OnApplicationPause)が発生した際にドキュメントフォルダにログを出力する
    ///  ポーズが発生したときはtrue、ポーズが解除されたときはfalse
    /// </summary>
    private void OnApplicationPause(bool pause)
    {
        m_IsPaused = pause;

        // アプリケーションの終了を行うかどうかを制御する
        ControlAppQuit();
    }

    // 略
#endif
}

作成したスクリプトを任意のオブジェクトに設定します。

実機での動作確認

アプリを起動後、Metaボタンでメニューを開いて[閉じる]ボタンを押下しました。

結果、ドキュメントフォルダにOnApplicationQuitの実行ログが出力されました。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/06/16/231908より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14