5
2

More than 1 year has passed since last update.

UE4でOculusQuest2を動かす2

Last updated at Posted at 2022-02-11

初めに

 今回の記事は前回の続きです。出来れば前回の記事を見た上で、今回の記事を見るようにして下さい。
 この記事を書いている人は、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は上(↑)です。

上から見た図 ↓
コントローラー トップ サムスティック.png
入力一覧3 サムスティック.png

・トリガーのタッチ、プレス、リリース、および指差しアクション

 コントローラーのトリガー部分になります。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になります。「タッチ」と逆です。

正面から見た図 ↓
コントローラー フロント トリガー.png
入力一覧3 トリガー.png

・グリップのプレスアクションとリリースアクション

 グリップはサイドのボタンの事です。名前は分からなくもないですね。

  • Oculus Touch (L or R) グリップ

    • グリップの「押し込み(押し)」を検知します。
    • 大体、軸取得の「0.8」前後で入力されている判定になるっぽいです。
  • Oculus Touch (L or R) グリップ 軸

    • グリップの「押し込み加減」を検知します。
    • グリップ軸の取得です。範囲は「1.0 ~ 0.0」です。

サイドから見た図 ↓
コントローラー サイド グリップ.png
入力一覧3 グリップ.png

・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

    • ボタンの「タッチ(触れる)」を検知します。
    • システムとメニューはタッチ機能がありません。

コントローラー トップ ボタン.png
入力一覧3 ボタン.png

 念の為もう一度確認しておきますが、UE4では「トリガー」が余分に入ってしまっているので注意して下さい。流石にUE5では治ってると思いたいですが...。

Oculus Remote

 すいません。これは分からないです。詳しい人教えて下さい。

Oculus Hand

 恐らく、ハンドトラッキングの機能だと思います。詳細は各自で調べて下さい5。現状使う予定は無いのですが、もし使うことがあるなら記述するかもしれません。


 以下のサイトからも参考にしました ↓

ゼロからコントローラーを動かす

 さて、入力関係の理解が終わったところで、前回作成した状態で実際にコントローラーを使ってみます。といっても、結構簡単に実装できます。

ポーンにコンポーネントを設定

  • ポーンを親にしてブループリントを作成
  • 次にコンポーネントに「Camera ComponentMotion Controller Component」を追加
    • Camera Componentの子にMotion Controller Componentを2つ設定 ※左手・右手用です
    • UE4側で既にモーションコントロール用のコンポーネントがあるので使わせてもらいます。

Motion Controller Component の設定.png

Motion Controller Componentの設定

  • 詳細 > ビジュアリゼーション > Display Device Model > ON
  • 詳細 > ビジュアリゼーション > Display Model Source > OculusHMD

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

  • 詳細 > モーションコントローラー > Motion Source > LeftRight

Motion Controller Component モーションコントローラー.png
 この設定は「このコンポーネントはどのコントローラーを指定するか」になるため必ず設定が必要です。出ないと、両方とも左手(デフォルト)の動きを再現してしまいます。忘れないようにして下さい。

Begin Playでの初期化

 最後に、Set Tracking Origin関数を呼び出して、引数はFloor Levelを設定して下さい。Oculus Quest2は「6Dof」なので「Floor level」になります。
 「6DoF」って何ぞや?という話なのですが、簡単に言うと、「頭の回転(3DoF)+ 頭の移動(3DoF)= 6DoF」ということです。詳細は下記サイトを覗いて下さい。拡大まで付けば9Dof

Motion Controller Component SetTrackingOrigin.png
※ 上図のノードコメントに「6DX」と書いてますが間違えてます。「6DoF」です。

コントローラーが動いたよ!やったね!

 単純にコントローラーを動かすなら上記項目を設定するだけで完了です。相変わらず手軽に出来るのでUE4君は凄いですね...。
モーションコントローラー テスト.gif
※ 背景はアセットを使用しています(若干見づらくなったのは気のせいです)

VRをどう料理するか?

 私自身、VRゲームを作ったことは全く無いので、手探りで作成していきます。
 今回は、敵UFOを打ち落とす360°シューティングにしようと思います。「自機は中心で、全方向からやってくる敵を打ち落としていく」というシンプルイズベストなものです。自機に敵が当たって体力が無くなればゲームオーバーになり、ゲームオーバーになるまで永遠に続きます。
 操作は立つか、回転する椅子に座ってプレイします。つまり、自機を中心にして敵が動いてくるので、移動する必要はありません。回転(振り向き)だけに集中出来て、「VR酔い」はほぼ無いはずです。
 ただでさえ普通のゲーム企画を考えるのは大変なのに、VRゲームの企画なんぞ無理なので、サンプルVRゲーム的なものになるのは許して下さい。内容自体は極々シンプルなのでVRゲーム開発か?と言われると違う気もするのですが、気にしてはいけません。

サンプルゲーム.png

VRゲームの難しいと思える所

  • 「VR」が必要と思える事(VRだと楽しいと思えるもの)
  • 出来る限りVR酔いを回避する事(実際の動きと違う事をするとかなり酔います)
  • VRでのUI配置・表示(調べてみると非常に難しいみたいですね...)

他にもあると思いますが、現状思ったものを挙げています。こう考えると、面白いVRゲームを作るとなると非常に難しい事になりますね...。う~ん...

次回へ

 次回はVRでのUIとゲーム作成を取り扱おうと思います。下記の参考サイトでやり方はネタバレしてます。

参考サイト

  1. ちゃんと、ヘッドセット上でも表示はされますが、「かなり」左上の端なので非常に見にくいです。素直に画面を見た方がデバッグしやすいです。

  2. いわゆる、「カチッ♪」ですね。地味に好きなんですよね。あの音。

  3. 静電容量式を採用しているみたいです。確か、スマホのタッチ検知のシステムですよね?あまり詳しくないので、これ以上は言いません。でも、なぜ採用したのだろうか?

  4. 公式サイトでは「0~1」と表示されていたのですが、手元のUE4で試してみると、0と1しか出力されていませんでした。UE4のバージョンによる仕様変更でしょうか?

  5. Oculus Quest2にハンドトラッキング機能の存在に最近気付いたのは内緒です。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2