0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XREAL Air 2 Ultra:Spatial Keyboardを使ってみる

0
Posted at

XREAL Air 2 Ultra × Unity 6 で Spatial Keyboard を実装する

はじめに

AR空間での文字入力は、パスワード認証や検索、マニュアルの作成において非常に重要です。
今回は XREAL Air 2 Ultra で、XR Interaction Toolkit (XRI) の「Spatial Keyboard」を利用し、空間に固定されるキーボードや視界に追従するキーボードの挙動を検証しました。

動作確認環境

  • Unity: 6000.0.70f1
  • XREAL SDK: 3.1.0
  • AR Foundation: 6.0.6
  • XR Interaction Toolkit: 3.0.10
  • Device: XREAL Air 2 Ultra + Beam Pro

1. 主な機能

本プロジェクトでは、初期状態の認証(パスワード入力)を解除することで、2種類のキーボードエリアを体験できるように構成しています。

機能 内容
Authentication パスワード("12345")入力による機能ロックの解除
World Keyboard 3D空間内の特定の位置に固定して配置されるキーボード
Global Keyboard 常にユーザーの視界(正面)に出現するシステム共通キーボード
XRKeyboardDisplay 文字数制限(8文字)、確定時の自動消去、リアルタイム更新などの設定検証

2. XRKeyboardDisplay のインスペクター設定

空間キーボードを制御する中心的なコンポーネントが XRKeyboardDisplay です。このコンポーネントの設定次第で、入力のリアルタイム性や制限を自由に変更できます。

設定項目 内容・使いどころ
Use Scene Keyboard ON: 空間に固定されたキーボードを使用 / OFF: 常に正面のグローバルキーボードを使用
Update On Key Press ON: 1文字打つたびに入力欄を更新 / OFF: 確定時のみ更新(パスワード等に便利)
Monitor Input Field Character Limit InputField側で設定した「最大文字数(Character Limit)」をキーボードにも適用します
Clear Text On Submit 送信(確定)ボタンを押したときに、入力欄の文字を自動で消去します
Clear Text On Open キーボードを開いた瞬間に、以前の入力をリセットします
Always Observe Keyboard 入力欄がフォーカスされていない時でも、常にキーボードの状態を監視します

3.シーン構築と設定

空間キーボードの配置

  1. XRI のサンプル(Spatial Keyboard/KeyboardDemo.unity)からオブジェクト一式をコピーしてシーンに配置します
  2. Input Field World Keyboard を複製し、認証用の PassWord Panel を作成します
  3. PassWord Panel に独自スクリプト(PinCodeManager.cs)をアタッチし、パスワードを設定します
  4. XRKeyboardDisplay のインスペクター下部にある On Text Submitted (String)イベントを探す
  5. + ボタンを押して、PinCodeManager がアタッチされたオブジェクトをドラッグ&ドロップし、 PinCodeManager > ValidateInput を選択します

4. スクリプトの実装:PinCodeManager.cs

パスワード入力を判定し、正解の場合にのみメイン機能(Display)を表示させるための管理スクリプトです。

using UnityEngine;

    public class PinCodeManager : MonoBehaviour
    {
        [Header("Settings")]
        [SerializeField] private string m_CorrectPin = "12345";

        [Header("Target Objects")]
        [SerializeField] private GameObject m_InputPanel;
        [SerializeField] private GameObject m_Display1;
        [SerializeField] private GameObject m_Display2; 
        private bool isDisplay = false;

        public void ValidateInput(string input)
        {
            if (input == m_CorrectPin)
            {
                OnSuccess();
            }
        }

        private void OnSuccess()
        {
            // パネルを非表示にし、検証用の機能エリアを有効化する
            if (m_InputPanel != null)
                m_InputPanel.SetActive(false);

            if (m_Display1 != null)
                m_Display1.SetActive(!isDisplay);

            if (m_Display2 != null)
                m_Display2.SetActive(!isDisplay);
            
            isDisplay = !isDisplay;
        }
    }

5. ビルドとデプロイ(Beam Pro)

  1. Build Settings: Platform を Android に変更し、Build and Run を実行します
  2. 接続: Beam Pro を PC に接続してインストールします
  3. アプリ起動: Beam Pro 内の MyGlasses アプリから起動し、カメラ権限および「他のアプリの上に表示」を許可します

6. 実際に動かしてみた感想

空間キーボードを実際に運用してみた所感です。

安定した入力体験

特に支障なくスムーズに使用することができました。入力時のレスポンスも良く、AR空間でのタイピングも違和感が少ないです。

活用の幅広さ

テキストの設定(文字制限やリアルタイム更新など)が非常に簡単にできるため、入力だけでなく、以下のような用途にも十分対応できそうです。

  • マニュアル作成: 動画撮影中の説明用ポップアップ入力
  • 確認テスト: 現場での点検結果やチェック項目の入力
  • 認証フロー: 今回実装したようなパスワードによる機能制限

視界からキーボードが消えた際の自動再配置(Global Keyboard)も賢く、AR作業を妨げない設計が好印象でした。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?