ハンドコントローラーでVR日本語入力✏

# VR内で文字を入力する
この記事は、Oculus Rift Advent Calendar 2016 の17日目です。
http://qiita.com/advent-calendar/2016/oculus-rift

昨日は[おかず](https://twitter.com/pafuhana1213)さんの「[VRコンテンツ開発について雑多に色々描いてみる](http://pafuhana1213.hatenablog.com/entry/2016/12/16/003328)」でした。
酔った勢いとは思えないまとまり具合でVR開発について具体的な改善案を提示されており、素晴らしいです。

VRのインフラ化を目論むにあたって、文字入力は死活問題です。現在の、ソーシャル機能を中心にいくつものキャズム超えてきた（※個人の見解です）コンピュータシステムにおいて、文字入力は**全てのベースとなる**機構です。
将来的には当然ながらVRならではの操作系が台頭してくる事が予想されますが、それまでの間はバーチャルディスプレイも併用されていく事になるでしょうし、快適に文字入力ができることの必要性は小さくないと考えます。

本稿のために VR 向けの日本語入力プログラムを作成しましたので紹介します。※Unity 用です。
なお、これは Oculus Rift Advent Calendar であるため、使用する機材として **Oculus Touch** を定めます。

なお、成果物を GitHub に公開しています。
https://github.com/yutokun/VR-Text-Input

## キーボードについて

タイプライター時代から使われて来たキーボードという機構は、コンピュータへの文字入力においてスタンダードになっていますが、以下の理由からVRで快適とは言えません。

- 動きが細かい
- 5本の指の動きを取得する手段がない
- 通常キーボードを入力する時に支えてくれる**パームレストを確保できない（重要）**

そこで、こうです

![概要.gif](https://qiita-image-store.s3.amazonaws.com/0/138197/f263e585-5032-ab2d-1f2a-38352b54ea97.gif)

出来るだけ楽に、最小の動きで入力できるようにするため、下記の点に気を使いました。

- なるべく運動量を少なく
- 細かい動きを必要とせず
- 片手だけで操作できる事

## 操作方法

1.**腕をひねって**入力する文字を選びます。子音が切り替わる時に Touch が振動でフィードバックを返し、操作感を高めています。

![捻り.gif](https://qiita-image-store.s3.amazonaws.com/0/138197/1b4fdc5c-8270-b958-a27f-de970c0441a6.gif)

2.**人差し指を押し込むと母音を選ぶ**状態になり、**離すと決定**です。かなり快適です。

![人差し指.gif](https://qiita-image-store.s3.amazonaws.com/0/138197/f997ff86-02df-9b10-67f6-6a392547c794.gif)

3.人差し指を押し込んだ状態で**スティックを上下に操作**すると、上下のバリエーションが入力されます。
連続入力が可能です。

![親指.gif](https://qiita-image-store.s3.amazonaws.com/0/138197/ef1ac02f-c376-65f0-19dc-ac5016b6a424.gif)

4.**中指を押し込む**と「はまやらわ」に切り替わります。離すと「あかさたな」です。

![中指.gif](https://qiita-image-store.s3.amazonaws.com/0/138197/bca0cfc5-f274-2e24-f79c-f6f108289fc8.gif)

## 現在の問題

- キーボードやフリック入力と違って人が不慣れな形式なので最初のハードルは多少あると考えられます。
- また、狙った1つ前の母音が入力されている事がままあります。その辺り、直前の移動ベクトルを見て調整する余地はありそうです。
- どの階層にいるのかわかりづらくなっています。階層で色を分けると良いかもしれません。
- 母音の選択もわずかに拡大するなど、わかりやすくする工夫がありそうです。

## 他の事例

最後に、他に試みられている事例を紹介します。

### キーボード

![keyboard.png](https://qiita-image-store.s3.amazonaws.com/0/138197/a2e3db2b-c1d3-2643-f337-32c9d70def7b.png)
*Oculus Quill より*

そのまんまキーボードです。視線やハンドコントローラーで狙いを定めるものが多いようです。  
時間がなければこれでも良いでしょうけれど、作る作業は地味になりそうだし皆が配置を知っている事以外にメリットはありません。

### フリック入力

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">これが…！おかず式VRキーボード ver0.1.0だ…！　<a href="https://twitter.com/hashtag/UE4?src=hash">#UE4</a> <a href="https://twitter.com/hashtag/VR?src=hash">#VR</a> <a href="https://t.co/FvDxKS0Gqn">pic.twitter.com/FvDxKS0Gqn</a></p>&mdash; おかず（カントーのすがた） (@pafuhana1213) <a href="https://twitter.com/pafuhana1213/status/798202509835849732">2016年11月14日</a></blockquote>
by [@pafuhana1213](https://twitter.com/pafuhana1213)

スマートフォンのフリック入力にインスピレーションを得ているパターンです。  
入力デバイスの位置に関わらず利用でき、キーボードほど細かい操作を必要とせず、多くの人にとって馴染みのある入力方法である点が優れています。

### 扇形入力

今回採用している方式です。スマートフォン向けATOK等でも見かけたように思いますが、記事を書いているときに探したらなんとVR向けに先行例がありました。
Unreal Engine 4 でてんちょーさんが製作されているVR用キーボードです。
今回作成したものと、操作方法は異なっているようです。~~（よかった…）~~
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ボタン+スティック タイプのキーボードを作ってみた(日本語版) <a href="https://twitter.com/hashtag/UE4?src=hash">#UE4</a> <a href="https://twitter.com/hashtag/VR_keyboard?src=hash">#VR_keyboard</a> <a href="https://t.co/4VJTxECrLx">https://t.co/4VJTxECrLx</a></p>&mdash; てんちょー (@shop_0761) <a href="https://twitter.com/shop_0761/status/798265890454302724">2016年11月14日</a></blockquote>
入力操作の細かい所はわかりませんが、キーボード型の英数向けからスタートしているみたいですね。
Twitter の Moments でまとめられています。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">⚡️ &quot;VRキーボードまとめ&quot; <a href="https://twitter.com/hashtag/VR_keyboard?src=hash">#VR_keyboard</a><a href="https://t.co/PrInztY3g7">https://t.co/PrInztY3g7</a></p>&mdash; てんちょー (@shop_0761) <a href="https://twitter.com/shop_0761/status/791483211607973888">2016年10月27日</a></blockquote>

### 音声入力

声で入力するパターンです。正確な入力はできませんが、チャットする分には十分なのではないでしょうか。~~普通に音声チャッry~~  
プラットフォーム依存性が高く、使用料がかかる場合もあるため使い放題は難しいですが、2016年12月現在、VR内で一番手軽なものはこれです。

#### Windows Speech
[Unity に API が用意されており](https://docs.unity3d.com/ScriptReference/Windows.Speech.DictationRecognizer.html)、非常に手軽にオフラインで使えます。
Windows の音声入力サービスを使用し、Windows 10 専用です。現状VRはほぼ Windows 専用と言っても差し支えないので、ちょっと遊んでみる分には大きな問題はないでしょう。

## まとめ

VR では豊かなジェスチャーによる自然なコミュニケーションが可能なため、文字入力に対する要求は現状そこまで大きくなってはいないと感じています。  
しかし、よく言われるように「ユーザーは手に入れるまでそれが本当に欲しかったものなのかわからない」のです。いつか誰かが、物理キーボードよりも快適な入力手段を実現すれば、将来のVRがスマートフォンのように当たり前に溶けてしまう未来の一助となるかも知れません。

もし誰かがこの記事を読んで、**よっしゃやってやるぜ！** という気持ちになっていただけたなら、なんか凄くてヤバい激エモインプットを作ってみて下さい。よろ！

なお、今回の入力システムを使ってみたいという方は下記の GitHub から .unitypackage をダウンロードできます。
https://github.com/yutokun/VR-Text-Input
プルリク、Clone、助言、使ったよ報告など大歓迎です〜〜！

## Next Article

明日は [きゅーこん](https://twitter.com/cubic9com) さんの「[Oculus Storeでの配布方法](http://cubic9.com/Devel/OculusRift/OculusStore%A4%C7%A4%CE%C7%DB%C9%DB%CA%FD%CB%A1/)」です。
私もそろそろ何か Oculus Store に上げようと思っていたので参考になりそうです！