初めに
今回の記事は前回の続きです。出来れば前回の記事を見た上で、今回の記事を見るようにして下さい。
この記事を書いている人は、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にハンドトラッキング機能の存在に最近気付いたのは内緒です。 ↩