WebGLInputからの変更点
- input領域はデフォルトで非表示
- input領域は画面外上部に存在はするが隠している
- 選択時にinput領域が隠れるとUnityのViewサイズが変わるため
- モバイルの判定にiPad向けも含める
- 入力のフォーカスを外れた際にInputFieldの入力をクリアできるようにした
WebGLInput/Assets/WebGLSupport/をコピーしてプロジェクトに追加してください
- InputFieldの入力を検知すると、WebGLInputのプラグインを通してブラウザのinput要素を生成する
- htmlファイルにinput要素がUnityのView(unity-container)とは独立して動的に追加される
- 以降はinputの内容が変更されるとUnityに変更内容を通知する
input要素の位置がキーボードにより隠れてしまうとView全体を上に移動するようになっている。そのためinput要素が生成される位置を常にトップとすることでこの問題を回避した。https://github.com/tetsujp84/WebGLInput/blob/master/Assets/WebGLSupport/WebGLInput/WebGLInput.jslib#L40-L44
InputFieldが画面下部にあり、入力中の文字が視認できない場合はUnity側でInputFieldと連動した表示欄を作っておくか、WebGLInput.jslibを改造して位置やサイズを個別で調整すること。
入力時にズームされてしまう場合、Headタグ内に以下を追加することで無効にできる
<meta name="viewport" content="user-scalable=no">
iPadはApplication.isMobilePlatformがfalseになる。また、WebGLの場合はApplication.platformがWebGLPlayerになるなどiPadの判定が正確に取れないため、強制的にモバイル判定をさせるフラグを別で追加している。 https://github.com/tetsujp84/WebGLInput/blob/master/Assets/WebGLSupport/WebGLInput/WebGLInput.cs#L127
InputField内に直前まで入力していた文字が残ってしまうため、入力完了時に消すフラグを追加した。 この方法以外にもInputFieldのonEndEditで明示的に消してもよい。 https://github.com/tetsujp84/WebGLInput/blob/master/Assets/WebGLSupport/WebGLInput/Wrapper/WrappedInputField.cs#L98
Unity2020でのonEndEditは確定時以外にもキーボードからフォーカスを外した際に呼ばれるようになっている。 Unity2021からはonSubmitが用意されており、そちらは確定した場合のみ呼ばれるようになっている。