VR日記その12 -unityで音声入力がしたいその2

前回の記事↓で、音声入力ができるようになった…はずだった。

この状態でOculusにビルドしようとしたら失敗した。エラーの文面はこうだ。「UnityWngine.Windows.SpeechはWindowsでしか使えません(意訳)」…そういえばWindowsって書いてあるじゃん!?という事で駄目でした(プロジェクト上の再生ボタンだと問題なく動く)。代替手段が見つからず、残念ながらこのプロジェクトは(ビルドが出来ないため)凍結することにした。基本の作りとしては一応できたので記事として残しておく。

①できたもの

やった事は音声を入力すると同時に、新規オブジェクトを作成し文字を召喚する。そしてそれをつかんで移動させる。

こんな感じ。動画ではしりとりをしている。文字入力が失敗したのは左に。成功したのは右に並べていった。長いワードの方が認識がよさそう。

②音声入力部分

色々と検索したがunityとOculusで音声認識を完璧にしている記事は見当たらなかった。Androidはあるが、求めているのとはちょっと違う感じだ。

それはそれとして、今回実装したのは文字の入力と同時にオブジェクトを召喚して配置する機能だ。前回の記事で実装したスクリプトに手を加える形で行った。

音声入力の有無がそのままでは分からなかったため、入力を受け付けているときには「音声入力中」の文字を出すようにした。また、音声が取れてきたときに、「Summon」スクリプトを呼び出してテキストの値を渡している。

画像2

召喚する側(Summon)のスクリプト。呼び出されるとオブジェクト召喚してテキストの値を書き換える。

画像1

これを召喚地点となる空のオブジェクトに両方適用した。

③ポインタ―部分

Oculusの場合DistanceGrabberとDistanceGrrableを使用することで遠くのものをつかんだり投げたりできる。しかしこのスクリプトを使ってみたところ、掴む対象が分かりにくく、今回のように同じようなオブジェクトが密集するような場面ではあまり有用ではなかった。そこで色々ググった結果、この記事にたどり着いた。

https://qiita.com/culage/items/e24d9725b40a04130336

この記事では最初にアクティブなコントローラーを検知して、ポインターの出すものを決めていたが、今回は右のコントローラのみ動けばよかった。そのため適用したオブジェクトのLineRendererを取得し、ビームを出すようにした。残りはほぼそのまま記述している。

画像3

流れとしてはビーム出す→オブジェクトに当たると対象を取得→その状態でトリガーを押すとオブジェクトの位置を取得→相対位置を保ったまま移動させる…というもの。トリガーを放すと取得したオブジェクトを開放する。


このプロジェクトはいったんここで凍結。ちゃんと音声認識できるナレッジを見つけたら続きを作りたいと思う。


この記事が気に入ったらサポートをしてみませんか?