oto-nari

[Unity/WebGL]Chrome(Android)でカメラの許可等のポップアップ出現後、操作不可

Kojiro Tanaka (更新: )

※Unity 2021.3.11f1で修正されたかも

WebGL: Fixed a bug where losing focus on the player would cause buttons to become stuck. (UUM-3230)https://unity3d.com/jp/unity/whats-new/2021.3.11

上記の通り修正された可能性があるので、この対応はアップデートにより不要になる可能性があります。

概要

現象としてはカメラの要求等を行ったときのプロンプトでUnityの画面じゃないところにフォーカスを当てたとき、元の画面をタップしても反応しなくなってしまう。

タイトルのSceneでApplication.runInBackgroundをtrueにする

上記記事に記載があった内容。
公式マニュアルによると「キャンバスやブラウザーウィンドウがフォーカスを失っても、コンテンツは引き続き実行されます。」とのことで、一度これを試してみる。
※Chromeのインスペクタでリモートでwindow.alert(1)を投げてテスト

単純にApplication.runInBackground = trueだけだと予期した通りにならず、操作不能に陥る。

using UnityEngine.EventSystems;

namespace xxx.Scripts.Utils.Misc
{
    public class XxxEventSystem : EventSystem
    {
        protected override void OnApplicationFocus(bool hasFocus)
        {
#if !(UNITY_WEBGL && !UNITY_EDITOR)
            base.OnApplicationFocus(hasFocus);
#endif
        }
    }
}

WebGL版のみEventSystemのOnApplicationFocusで「何もしない」スクリプトを作ってみると、アラートを出した後にアプリケーションがフォーカスを失うことが無くなった。

※2021.3.6f1で確認しているけど結構深刻なバグなので、モバイルサポートを本格化する2022のLTSリリースでは治ってる気がするのでコードが腐らないように注意すること

シェア

関連記事

← 記事一覧へ