初めに
 今回の記事は前回の続きです。出来れば前回の記事を見た上で、今回の記事を見るようにして下さい。
 この記事を書いている人は、VR開発については全くの初心者で、普通に間違っている可能性も十分にあるので、その点に関してはご了承ください。
追記:第3回を上げました
入力関係
入力関係が非常にややこしいと思ったので、ここに書いておきます。というのも、初見だと「トリガー?サムスティック?タッチ?グリップ? なるほど...分からん。」になる可能性大だと思います。
インプットの種類
 初見で見たとき「Oculusの入力3項目あるじゃん。どれだよ!」となりました。といっても、結局使うのは「Oculus Touch」になります。
 ちなみに、エディタ上では「ヘッドセットを覗き込むか、ヘッドセットの検知部分を手で押さえるか」しないと入力状態になりません。例えば、PrintStringでデバッグするなら、ヘッドセットの検知部分を手で押さえて、画面を見て確認することになると思います。1
Oculus Touch
 通常ではこの欄を使います。この欄を展開すると絶望の種類数が待っています。ですが...頑張って覚えましょう。簡易的なゲームの場合、必要な入力数はそんなに多くないと思います。
 順番は「oculus FOR DEVELOPERS - Oculusコントローラー入力のマッピング」におおよそ準じます。このサイト説明が複雑怪奇(ry
 後、画像はOculusQuest2ではないですが、ほぼ同じなので気にしないで下さい。UE4のエンジンに入ってるモデルをスクショしたものです。
・サムスティックのタッチ、プレス、サムアップアクション、プレスアクション、リリースアクション
コントローラーのスティック部分になります。
- 
Oculus Touch (L or R) サムスティック - スティックの「押し込み」を検知します。
- PS4 コントローラーで例えるなら「L3, R3」に当たり、「スティックを押し込む」事で入力が入ります。2
 
- 
Oculus Touch (L or R) サムスティック タッチ - スティックの「タッチ(触り)」を検知します。
- 押し込まずタッチするだけで入力が入ります。3
- 中心の凹んでいる部分のみ反応します。
 
- 
Oculus Touch (L or R) Thumb Up CapTouch - スティックの「タッチ加減」を検知します。
- 「タッチ」と「Up CapTouch」の違いはほぼ分からないですね。僅かに離れていても触れている判定になります。
- 触れていたら0、検知範囲外なら1になります4。「タッチ」と逆です。
 
- 
Oculus Touch (L or R) サムスティック 上・下・左・右 - 各4方向のスティックの「倒し」を検知します。
- 大体、軸取得の「0.7」前後で入力されている判定になるっぽいです。これの調整項目はあるのでしょうか?
 
- 
Oculus Touch (L or R) サムスティック X・Y - 縦・横2軸のスティックの「倒し加減」を検知します。
- スティック軸の取得です。範囲は「-1.0 ~ +1.0」、正がXは右(→)、Yは上(↑)です。
 
・トリガーのタッチ、プレス、リリース、および指差しアクション
 コントローラーのトリガー部分になります。PS4コントローラーなら「R2, L2」に当たります。
 ちなみに、「UE4 Ver 4.72」では本来の「Oculus Touch (L or R) X, Y(押す・タッチ)」の部分が「Oculus Touch (L or R) トリガー X, Y(押す・タッチ)」になっています。つまり、「トリガー」を無駄に表示しています。
- 
Oculus Touch (L or R) トリガー - トリガーの「押し込み(押し)」を検知します。
- 大体、軸取得の「0.8」前後で入力されている判定になるっぽいです。
 
- 
Oculus Touch (L or R) トリガー 軸 - トリガーの「押し込み加減」を検知します。
- トリガー軸の取得です。範囲は「1.0 ~ 0.0」です。
 
- 
Oculus Touch (L or R) トリガー タッチ - トリガーの「タッチ(触り)」を検知します。
- 押し込まずタッチするだけで入力が入ります。
- 中心の上側のみ反応します。
 
- 
Oculus Touch (L or R) Pointing CapTouch - トリガーの「タッチ加減」を検知します。
- 「タッチ」と「Pointing CapTouch」の違いはほぼ分からないですね。僅かに離れていても触れている判定になります。
- 触れていたら0、検知範囲外なら1になります。「タッチ」と逆です。
 
・グリップのプレスアクションとリリースアクション
グリップはサイドのボタンの事です。名前は分からなくもないですね。
- 
Oculus Touch (L or R) グリップ - グリップの「押し込み(押し)」を検知します。
- 大体、軸取得の「0.8」前後で入力されている判定になるっぽいです。
 
- 
Oculus Touch (L or R) グリップ 軸 - グリップの「押し込み加減」を検知します。
- グリップ軸の取得です。範囲は「1.0 ~ 0.0」です。
 
・X, Y, A, B, ホーム、システムボタンのプレスアクションとリリースアクション
左が「X, Y, メニュー」右が「A, B, システム」になっています。サイト上では「ホーム・システム」なのに、UE4上では「メニュー・システム」になるのは止めて欲しいですね。統一して下さい。もしかして、バージョンのせい?
- 
Oculus Touch (L, R) X, Y, A, B, メニュー, システム(押す) - ボタンの「押し込み(押し)」を検知します。
 
- 
Oculus Touch (L, R) X, Y, A, B - ボタンの「タッチ(触れる)」を検知します。
- システムとメニューはタッチ機能がありません。
 
念の為もう一度確認しておきますが、UE4では「トリガー」が余分に入ってしまっているので注意して下さい。流石にUE5では治ってると思いたいですが...。
Oculus Remote
すいません。これは分からないです。詳しい人教えて下さい。
Oculus Hand
恐らく、ハンドトラッキングの機能だと思います。詳細は各自で調べて下さい5。現状使う予定は無いのですが、もし使うことがあるなら記述するかもしれません。
以下のサイトからも参考にしました ↓
ゼロからコントローラーを動かす
さて、入力関係の理解が終わったところで、前回作成した状態で実際にコントローラーを使ってみます。といっても、結構簡単に実装できます。
ポーンにコンポーネントを設定
- ポーンを親にしてブループリントを作成
- 次にコンポーネントに「Camera Component・Motion Controller Component」を追加- 
Camera Componentの子にMotion Controller Componentを2つ設定 ※左手・右手用です
- UE4側で既にモーションコントロール用のコンポーネントがあるので使わせてもらいます。
 
- 
Motion Controller Componentの設定
- 詳細 > ビジュアリゼーション > Display Device Model > ON
- 詳細 > ビジュアリゼーション > Display Model Source > OculusHMD

 これら設定は「エンジン内のモデルを表示する?」と「どのモデル?」です。必須では無いのですが、とりあえず動いている事が分かるように設定しておきます。勿論、BP側で動的に変更できるので、「最初はコントローラーを表示しておいて一定時間後に消滅する」のような事をやってもいいかもしれません。
- 詳細 > モーションコントローラー > Motion Source > LeftかRight

 この設定は「このコンポーネントはどのコントローラーを指定するか」になるため必ず設定が必要です。出ないと、両方とも左手(デフォルト)の動きを再現してしまいます。忘れないようにして下さい。
Begin Playでの初期化
 最後に、Set Tracking Origin関数を呼び出して、引数はFloor Levelを設定して下さい。Oculus Quest2は「6Dof」なので「Floor level」になります。
 「6DoF」って何ぞや?という話なのですが、簡単に言うと、「頭の回転(3DoF)+ 頭の移動(3DoF)= 6DoF」ということです。詳細は下記サイトを覗いて下さい。拡大まで付けば9Dof

※ 上図のノードコメントに「6DX」と書いてますが間違えてます。「6DoF」です。
コントローラーが動いたよ!やったね!
 単純にコントローラーを動かすなら上記項目を設定するだけで完了です。相変わらず手軽に出来るのでUE4君は凄いですね...。

※ 背景はアセットを使用しています(若干見づらくなったのは気のせいです)
VRをどう料理するか?
 私自身、VRゲームを作ったことは全く無いので、手探りで作成していきます。
 今回は、敵UFOを打ち落とす360°シューティングにしようと思います。「自機は中心で、全方向からやってくる敵を打ち落としていく」というシンプルイズベストなものです。自機に敵が当たって体力が無くなればゲームオーバーになり、ゲームオーバーになるまで永遠に続きます。
 操作は立つか、回転する椅子に座ってプレイします。つまり、自機を中心にして敵が動いてくるので、移動する必要はありません。回転(振り向き)だけに集中出来て、「VR酔い」はほぼ無いはずです。
 ただでさえ普通のゲーム企画を考えるのは大変なのに、VRゲームの企画なんぞ無理なので、サンプルVRゲーム的なものになるのは許して下さい。内容自体は極々シンプルなのでVRゲーム開発か?と言われると違う気もするのですが、気にしてはいけません。
VRゲームの難しいと思える所
- 「VR」が必要と思える事(VRだと楽しいと思えるもの)
- 出来る限りVR酔いを回避する事(実際の動きと違う事をするとかなり酔います)
- VRでのUI配置・表示(調べてみると非常に難しいみたいですね...)
他にもあると思いますが、現状思ったものを挙げています。こう考えると、面白いVRゲームを作るとなると非常に難しい事になりますね...。う~ん...
次回へ
次回はVRでのUIとゲーム作成を取り扱おうと思います。下記の参考サイトでやり方はネタバレしてます。
参考サイト
- 
ちゃんと、ヘッドセット上でも表示はされますが、「かなり」左上の端なので非常に見にくいです。素直に画面を見た方がデバッグしやすいです。 ↩ 
- 
いわゆる、「カチッ♪」ですね。地味に好きなんですよね。あの音。 ↩ 
- 
静電容量式を採用しているみたいです。確か、スマホのタッチ検知のシステムですよね?あまり詳しくないので、これ以上は言いません。でも、なぜ採用したのだろうか? ↩ 
- 
公式サイトでは「0~1」と表示されていたのですが、手元のUE4で試してみると、0と1しか出力されていませんでした。UE4のバージョンによる仕様変更でしょうか? ↩ 
- 
Oculus Quest2にハンドトラッキング機能の存在に最近気付いたのは内緒です。 ↩ 









