名古屋でVRハッカソンをやるためのUE4 勉強会 2限目に行ってきた。
名古屋ゲーム制作部というゲーム作りの好きな人が集まっている団体の勉強会だ。
前回の1限目に続いて、参加した。
今回はHMDの実機向けのソフトを動かすので、デスクトップPCを持ち込んだ。
前回と同じくFirstPersonのプロジェクトを元にして開発する。(HMD用のプロジェクトは使わない)
初期設定として、iniファイルをエディタで直接編集してHMD用にスムーズに動くようにする。
自分の体のオブジェクトを2つ追加し、1つはカメラの位置に追従するが回転しないようにする。
もう1つはカメラと一緒に回転するようにする。
プレイヤーの体と腕はそういう設定にするということらしい。
次に視線入力のようなものを実装した。
カメラの元座標にカメラの方向ベクトルを何倍かして加算し、判定用の座標点を2つ計算する。
そして、その2点の間の直線上に物体があるかどうか判定する。
見つかった物体のうちタグを付けて、タグのある物体に3秒間当たり続けているかどうか判定し、3秒経過したら画面に文字を表示するというものを作った。
実機で動作確認をした。自分のPCではなく、会場のPCに実行ファイルをコピーして動かした。
ここまでが前半。
後半は、また新規のプロジェクトで、FirstPersonでない本当に空っぽのプロジェクトから作成。
ハンドコントローラーのオブジェクトを追加して、右手と左手のコントローラーに処理を追加する。
今回は、右手と左手に同じ処理をさせるので共通の関数を作る。
メインの処理の最初で右手の処理をするオブジェクトと左手のものとを動的に生成する。
処理の内容で、物を掴む処理と離す処理を実装する。
掴む処理は、手のオブジェクトにくっつけたコリジョン判定が別の物体と重なった場合で、コントローラーのトリガーボタンを押したら物体が手にくっつく処理をする。
離す処理は、トリガーボタンを離したら物体が手から離れるという処理をする。
これにより、物体を掴んで投げるというのができる。
ステージ上に的になる物体と、投げる物体を配置。
スコアの表示用にウィジェットを追加した。ウィジェット上にテキストを配置し、そのウイジェットをステージ上に置く。同様にもう1つウィジェットを作って、そちらはカメラに追従して動くように設定する。
後者はメガネの汚れのようにくっついてくるのでちょっとウザいので実際にはあまり使われないそうだ。
だいぶ予定時間をオーバーした。
動作確認の会場PCのうちOculus Rift CV1のほうでは全員がうまく動かなくて、HTC Viveが混み合っていて、時間内に自分は動作確認できなかった。
懇親会に行ったあと、希望者は延長戦が可能ということなので延長した。
自分のPCのHTC Viveを借りて接続したのだが、動作しない。
あきらめて会場のPCのHTC Viveで動かしてみた。
しかし、何か間違えたようで、物体を掴むことができなかった。
講師用のプロジェクトファイルを貰ったので、あとでチェックする。
Oculus Rift CV1でうまく動かない件は、ポジショントラッキングのカメラ位置の初期化の問題だったらしい。
ハンズオンの時に、処理を抜かしてしまったとか。(HTC Viveは初期値が勝手に入るから問題が無かった?)
少しOculus Touchのタッチセンサーについて、値を表示させる処理を動かして、このあいだのタッチの誤爆について再検証してみた。
数値はfloatだけど、値としては0か1しか出ないようだ。
持ち方でやはり親指の付け根の肉が触れて誤爆というのがある。
だとすると、Oculus Touchのタッチセンサーは使いにくいのかもしれない。
C++のOculus TouchのSDKを使えばタッチセンサーの生値とか敷居値とかあるのかもしれないという話だったので、あとで調べてみたい。