MRが楽しい

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

HoloLens2アプリでホームボタンが押されたときにアプリを完全に終了させる

本日は HoloLens2 の技術調査枠です。
HoloLens2アプリでホームボタンが押されたときにアプリを完全に終了させる方法を記事にします。

ホームボタンをタップしたときの3Dアプリケーションの動作

HoloLens2 では3Dアプリケーションからホーム画面に戻るとき、ホームボタンをタップします。
f:id:bluebirdofoz:20211207005310j:plain

このとき、3Dアプリケーションは終了しておらず、フォーカスが外れた状態となっています。
バックグラウンド処理は動いており、かつ、再び起動パネルからアプリケーションを起動すると以前の状態を保ったまま再起動します。
f:id:bluebirdofoz:20211207005319j:plain

アプリケーションの状態をリセットするため、アプリを完全に終了したい場合はホーム画面に戻った後、更にアプリケーションの起動パネルを閉じる必要があります。
f:id:bluebirdofoz:20211207005405j:plain

ホームボタンが押されたときにアプリを完全に終了させる

今回はホームボタンが押された時点でアプリを完全に終了する処理を、スクリプトから実装してみます。
UWPアプリケーションを終了する CoreApplication.Exit 関数と、フォーカスが外れた状態を検知する OnApplicationFocus 関数を利用します。
docs.microsoft.com
docs.unity3d.com

以下のスクリプトを実装しました。
・AppExitCheck.cs

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

public class AppExitCheck : MonoBehaviour
{
    /// <summary>
    /// フォーカスの変更イベント
    /// </summary>
    /// <param name="focus"></param>
    private void OnApplicationFocus(bool focus)
    {
        // フォーカスが失われた場合はアプリを自動で完全終了する
        if (focus == false)
        {
#if WINDOWS_UWP
            Windows.ApplicationModel.Core.CoreApplication.Exit();
#else
            Application.Quit();
#endif
        }
    }
}

スクリプトを Unity プロジェクトの適当なオブジェクトに設定します。
これで準備完了です。
f:id:bluebirdofoz:20211207005520j:plain

動作確認

デプロイした3Dアプリケーションを起動し、再びホームボタンをタップしてホーム画面に戻ってみます。
f:id:bluebirdofoz:20211207005529j:plain

そのまま起動パネルを閉じることなく、再び起動パネルをタップしてみます。
f:id:bluebirdofoz:20211207005538j:plain

すると起動時に Unity ロゴが表示され、アプリケーションが初期状態から起動しました。
これはスクリプトにより、ホームボタンを押した時点で3Dアプリケーションが一度完全に終了したためです。
f:id:bluebirdofoz:20211207005546j:plain