9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VR法人HIKKYAdvent Calendar 2023

Day 17

Meta Questでシステムのバーチャルキーボードを呼び出す方法

Last updated at Posted at 2023-12-16

はじめに

本記事ではQuestの入力関連処理の際に立ち上がるキーボード(以後システムキーボード)を自作アプリで利用する方法についてメモします。

システムキーボードは多言語対応、変換対応、計算されつくしたUIUXを備えており、非常に使い勝手に優れています。

自作アプリに入力系の実装予定がある場合、システムキーボードを利用することはかなり大きなアドバンテージとなります。

バージョン情報

ツール、ライブラリ バージョン
Unity 2021.3.32f1
Meta XR Core SDK 59.0.0

挙動

以下が挙動の簡易的なデモです。InputFieldを選択する
とシステムキーボードが立ち上がります。

keyboard.gif

注意点として、システムキーボードが立ち上がるとアプリはフォーカス外にある状態となります。

入力を終了する、あるいはシステムキーボード外のエリアをトリガーでクリックすることにより、フォーカスがアプリに戻ります。

実装方法

以下パスのアセットファイルのRequires System KeyboardをTrueにします。
Assets/Oculus/OculusProjectConfig.asset
image.png

なんとこれだけでシステムキーボードが利用可能になります。
InputFieldのフォーカスが合ったかどうかや、既にInputFieldに文字が入力されているかなどを実装する必要はありません。

さらに踏み込んだ話をすると、”OpenXRを利用しているのでわざわざこのためにMeta XR Core SDKをプロジェクトに導入したくない”みたいなシチュエーションにおいては、以下をAndroidManifestに書き込むだけで利用可能となります。

<uses-feature android:name="oculus.software.overlay_keyboard" android:required="false"/>

入力フィールド以外における呼び出し

ここまでの対応で入力フィールドのフォーカスに応じたシステムキーボードの呼び出しが可能となりました。

もう一歩踏み込んだ実装として、"入力フィールド以外の箇所でのシステムキーボードの呼び出し"について考えます。

例えば、キャラクターを選択するとそのキャラクターの名前を入力する画面が立ち上げるようなシチュエーションです。

image.png

このようなシチュエーションを想定してプログラムからシステムキーボードを有効にする手段が用意されています。

以下が実際にプログラムから呼び出すサンプルです。

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class KeyboardTest : MonoBehaviour
{
    [SerializeField] private Button _button;
    [SerializeField] private TextMeshProUGUI _textMeshProUGUI;

    private TouchScreenKeyboard _overlayKeyboard;

    private void Start()
    {
        _button.onClick.AddListener(OnClickButton);
    }

    private void Update()
    {
        if (_textMeshProUGUI.text == _overlayKeyboard.text) return;
        _textMeshProUGUI.text = _overlayKeyboard.text;
    }

    private void OnDestroy()
    {
        _button.onClick.RemoveAllListeners();
    }

    void OnClickButton()
    {
        _overlayKeyboard = TouchScreenKeyboard.Open(_textMeshProUGUI.text, TouchScreenKeyboardType.Default);
    }
}

以下GIFのようにButtonをトリガーとしてシステムキーボードの呼び出しを行うことができました。入力結果を保持しておき、利用することも可能です。

pokemon3.gif


追記 2023/12/19

一週間前くらいからOSレベルのバグがあるらしく、まともに動作しない状態となっています。我々ではどうしようもできないので、Metaのアップデート待ちです。

参考リンク

9
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?