4
5

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 3 years have passed since last update.

VR空間上で使えるキーボードを作ってみる

Last updated at Posted at 2021-09-02

###1.キーボードを作るきっかけ
VR空間上でのキーボードは遠くに表示させての操作がほとんどだが、空間上で自分の手入力(ハンドトラッキング)でやったらどうなるかをテストするために作った。
A~Z入力のとても簡素なキーボードです。

###2.開発環境

  • Unity2020.3.4f1
  • OculusIntegration

※OculusIntegrationの手順は紹介しませんが、以下の項目にあるEnable Physics Capsulesにはチェックを入れておいてください。
image.png

###3.どういった仕様で作るか

  • VR空間上で入力したものはInputFieldに反映される。
  • Inspectorを弄るのは、タイトル変更と一部のドラッグ&ドロップのみ

####4.ヒエラキー上に追加するもの

  • InputField(TextMeshProでない場合、後に出るスクリプトを少々変更する必要あり)

image.png

  • VR空間上に配置するため、CanvasのRenderModeをWorldSpaceにする

image.png

  • 3DObjectのテキストをA~Zまで作成する(スクリプトでテキストを変更するので、GameObjectNameの変更だけしてください)
    image.png

###5.スクリプト

using UnityEngine;
using UnityEngine.UI;
using TMPro;

//このコードを入れとけばアタッチした時にAddComponentされる
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(BoxCollider))]

public class QiitaKeyBoard : MonoBehaviour
{
    //InputField(TextMeshProを使用)を定義
    [SerializeField] TMP_InputField _InputField;


    //3DTextMeshProを定義
    TextMeshPro MyNameText;

    Rigidbody rb;

    BoxCollider bc;

    //自分のゲームオブジェクト名を取得する変数を設定
    string MyGameObjectName;

    // Start is called before the first frame update
    void Start()
    {
        //自分のゲームオブジェクト名を取得
        MyGameObjectName = gameObject.name;

        //自分のゲームオブジェクト名を3DTextに反映
        MyNameText = GetComponent<TextMeshPro>();
        MyNameText.text = MyGameObjectName;

        ///OnTriggerEnterを動かす為の設定
        
         
        //3DTextが落下しないようにする
        rb = GetComponent<Rigidbody>();
        rb.useGravity = false;

        //BoxColliderをTrueにするための設定
        bc = GetComponent<BoxCollider>();
        bc.isTrigger = true;    
    }

    //3DTextに手が触れたらInputFieldに反映される
    private void OnTriggerEnter(Collider other)
    {
        _InputField.text += MyGameObjectName;
    }
}

完成したスクリプトはA~Zすべてにアタッチをしてスクリプトの変数InputFieldに、ヒエラキー上にあるInputFieldを入れましょう。

image.png

A~Zを全て選択してから行うと一括で入れられます

image.png

3DTextをハンドトラッキングで入力できるように配置する。

image.png

###6.実際の動き

qiitakeyboard.gif

###7.感想

ハンドトラッキングで文字入力できるのは便利かと思っていたが実際のところそうではなかった、その要因を挙げると

  • 人差し指で選んだ場合、他の指が別の文字を誤タッチする
  • ハンドトラッキングはカプセルコライダーがいくつもあるので、この仕様だと複数回入力を受けてしまう。
  • 空間上での操作なので、子供と大人とでは、やりやすさが異なる

これを回避する方法は、コライダー付きの細いオブジェクトを持ってのキーボード操作が一番手っ取り早いです。
連続入力は入力受付後コンマ数秒間コライダーをOFFにする等、色々な方法で回避が可能です。

4
5
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
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?