📘

【未解決】Questでキーボード入力時にフリーズする

2022/10/05に公開約2,300字

環境

アプリの仕様

  • アプリを立ち上げた最初のSceneで入力を行う(Made with Unityの直後のScene)
  • サービス内でマイクからの入力を扱っており、初回の再生時点でパーミッションを求める仕様にしている(2回目以降の立ち上げ時には確認は行わない)。以下のスクリプトが最初のSceneのGameObjectにアタッチされている。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if PLATFORM_ANDROID
using UnityEngine.Android;
#endif

public class MicPermissionHelper : MonoBehaviour
{
    void Start()
    {
#if PLATFORM_ANDROID

        if (!Permission.HasUserAuthorizedPermission(Permission.Microphone))
        {
            Permission.RequestUserPermission(Permission.Microphone);
        }
#endif
    }
}

起きている問題

  • Quest単機で動作させたときに、VR内キーボードから入力するとフリーズする(画面が視線に追従する)
  • 以下のような画面で、1文字入力するとフリーズ

問題が再現する条件

  • 常に発生するわけではなく、以下の1条件のタイミングでのみ発動する
  • BuildされたapkファイルをQuestにコピーし、初めて立ち上げたときの初めての入力で発生
    • 固まった状態で電源ボタンを押してスリープさせ、再度起動すると(アプリは終了していない)フリーズ状態は解除される。しかしまたキーを選択するとフリーズする。
  • 一度アプリを終了し(Homeボタンから)、再度立ち上げた際には問題は発生しない

解決

  • マイクパーミッションの確認を一番最初に呼ばないようにしたらフリーズしなくなった
  • マイクパーミッションの確認と、初回のSceneのロードで何かしらの干渉を起こしているのか?
    • 真因まではたどり着けなかった。
  • そもそも仕様として、再生された最初のSceneに入力フォームがある形式は今後変更した方がよい可能性が高い(サービス名を出すスタート画面のSceneを挟むなど)という別の話もある。

ログ

- UnityエディターからQuestのログを出力した。フリーズする時には、フリーズしない時には発生しない以下のWarnが発生していた。

Pid Tid Priority Tag Message
874 23487 Warn [CT] SVEGA: getMap is not supported.
... ... ... ... ...
874 1240 Warn [CT] VEGA_MAP_BUILDER: Resolve a potential TrackToMapPointAssosiation conflict between tracks 2097240 (index = 32, version = 88) and 2097239 (index = 32, version = 87)
  • また、フリーズしない時には、フリーズする時には発生しない以下のWarnが発生していた。
Pid Tid Priority Tag Message
874 23820 Warn [CT] VEGA:MAP_TRACKING_HM: [Throttled count=13] Bad map tracking: map tracking failed @ Submap id = 0, version = 617924818 with status: 2
... ... ... ... この後、Throttled countの数字のみが違うエラーが複数回記録されていた
  • これらを調べたが、実態を特定できずだった。(調査終了)。なにか知っている方いたらコメントお願いします!

追記(2022/10/15)

  • 入力が行われるSceneの前に別のSceneを挟んでも問題発生!(未解決)

Discussion

ログインするとコメントできます