※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の画面じゃないところにフォーカスを当てたとき、元の画面をタップしても反応しなくなってしまう。- WEBGLJsプロンプトの後にゲームにフォーカスを戻す方法。(モバイルクロームは、ゲームキャンバスの外側のURLまたは画面の白い部分に触れるまでタッチ入力を壊すようです)
- https://www.reddit.com/r/Unity3D/comments/oi5x8m/webgl_how_to_give_the_focus_back_to_the_game/
- 質問Chromeブラウザのポップアップにより、webglアプリがフォーカスを失い、元に戻すことができなくなります
- https://forum.unity.com/threads/chrome-browser-popups-causes-webgl-app-to-lose-focus-and-cant-be-regained.1223469/
タイトルの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リリースでは治ってる気がするのでコードが腐らないように注意すること

エンジニアとして働く90年生まれ。Web系技術を追っかけたり、PCガジェットや自転車いじりが趣味。オーディオオタク。