🐥

VRでスティック移動はもうやめてくれ - 破

2022/12/08に公開

はじめに

この記事は以下の記事の続きです。VR開発経験が少ない方は以下の記事を読んでからの方が分かりやすいかもしれません。

https://zenn.dev/kaibaoke/articles/art3_no_more_stick_move_0

前回の記事では歩行感覚を与えるという用途でスティック移動を採用するべきではないと主張しました。

今回の記事では、VR空間内を歩いているような感覚をプレイヤーに与えたいとき、どのような移動方法を採用すべきなのかについて考察していきたいと思います。

スティック移動以外の移動方法

まずスティック移動以外にどんな移動方法が考えられるか挙げてみましょう。どれ、chatGPTにでも聞いてみましょう。


ボタン操作……結構マイナーなところが来た印象です。

chatGPTの回答は微妙な感じでしたが、実は過去にOculusがVR空間内での移動方法についてのアイディアを出してくれています。こちらも参考にしてみましょう。
https://www.moguravr.com/oculus-rift-vr/

また、軽く既存のVRゲームの移動方法について書かれた記事を集めてみました。詳しくは記事の最後にのせておきます。

これらを合わせて、まずは移動方法を列挙してみます。

  • テレポート
  • 超高速移動
  • テレパス
    • コントローラーを使って移動線を引き、その上を自動的あるいはプレイヤーの動作に応じて移動していく。
  • 視線移動
  • 掴み移動
  • トラッキング
  • 腕振り移動
    • 歩く時のように腕を振り前進する。
  • チキンアクセラレーション
    • 頭を振って前進移動
  • ノッディングアクセラレーション
    • 頷いて全身移動
  • アクセラレーションタイプ
    • 異なる加速型を持つ、ボタンで歩行からダッシュに変化するなど
  • HMDジャイロ回転
    • コントローラーで回転を変えず、頭の向きで前進する方向を変える
  • HMDローテーションコントローラー
    • 手のコントローラーを動かした向きにプレイヤーも回転
  • HMDアクセラレーション
    • プレイヤーの頭の傾きに応じて移動(前に頷くように傾けて前進)
  • ノンコンスタントトップスピード
    • 移動速度に歩行のような緩急をつける
  • ルックアラウンドローテーション
    • 頭の向きで前進する方向を変える。正直軽く見ただけじゃHMDジャイロ回転となにが違うのか分かりませんでした。
  • ワールドローテーション
    • コントローラーを握りこみ、動かすことでプレイヤーではなく世界を回転させる。

上記は移動の操作方法なのか、回転の操作方法なのかなどは分けていません。上記の中から移動方法を組み合わせてぼくのかんがえたさいきょうの移動方法を作っていきます。

前提

まず前提として、使用可能なデバイスは Meta Quest2とコントローラー二つのみで実現可能な範囲 として考えます。
この時点で扱えるのは頭、両手の三点の回転と位置に限定されますね。
次に想定するVRコンテンツですが、今回はちょっとスケールを膨らませて、オープンワールドを歩くぐらいの規模感で考えてみましょう。みんなVRでオープンワールド歩きたいですよね?僕は歩きたい。

これらの前提のもと、最良の移動方法(歩行感覚を再現する方法)について考察していきます。

最良の移動方法は?

前述の前提を元に、まずはダメそうなものを排除していってみましょう。

まずはテレポート。テレポートは酔いにくい移動方法としては有力です。VR空間の世界観に没入するのが難しいと言う点を除けばそこまで悪い選択肢ではありません。UE4のVRテンプレートはテレポートで実装されてますね。しかし、歩いているという感覚を与えたいときには一気に長距離を移動するテレポートは不向きです。同じく超高速移動も不向きと言えます。ただ超高速移動はファストトラベルの表現とかならいいかもですね。

次に視線移動。これもダメそうです。身体にも歩行時のような感覚はないですし、酔いやすいと言えます。空を飛ぶならともかく、地に足を付けて歩きたいときには不向きでしょう。

チキンアクセラレーション。歩行感覚は再現しづらそうですが、頭を振っての移動ということで、酔いにくくはありそうです。しかし広いオープンワールドであの重い(503g)HMDを付けながら頭を振って歩くというのは悪夢ですね。実際に検証してみましたが結構疲れました。短時間かつ狭いフィールドでスタイリッシュなアクションを行う際は候補になりそうですが、今回はダメそうです。

HMDアクセラレーション。これも特定状況では威力を発揮しそうですが、オープンワールドで歩くという状況で採用したい移動方法ではありません。頭を傾けて移動となると視点移動の自由が移動方向に縛られてしまいますし、これもナシとします。

ワールドローテーションについてはかなりコンテンツを選びそうです。FPSタイプのコンテンツでは効果的だそうですが、オープンワールドではワールド側との兼ね合いも考えるとあまり採用したくはないですね。


さて、いくつかの移動方法を弾きましたが、残りの移動方法の中でさらに考えてみましょう。

理想的にはトラッキング方式が最良です。 だって歩いてるんですもの。歩行感覚を再現する必要なんてありません。とはいえ、現実の空間を考えればトラッキング方式には限界があります。部屋/ガーディアンの中の空間分しか動けませんからね。シーン遷移などを適切に使えばトラッキング方式も可能(SuperHotとか)ですが、オープンワールドでは限界がありそうです。

掴み移動と腕振り移動に関しては、動作が疲れるという点を除けば歩行感覚を再現する上では良さそうです。 前進移動では、より実際の歩行に近い腕振り移動を採用するのが良さそうです。動作が疲れると言う弱点に関しては、レベルデザインやファストトラベルで緩和することができそうです。さらに言えば、簡易的に移動できる手段を提供するのも手でしょう。車、馬などの乗り物を介して移動方法を変更したりするのが有効なのではないでしょうか。特に、腕全体を使って動くのと手首の動作だけで動くのでは大きく疲労感が変わってきます。移動がメインのフェーズでは手首の操作だけで動けるようにする、などが最適なように思えます。 それこそ馬に乗ったら手首を少し揺らすだけで手綱を引けるようにする、などは良い形なのではないでしょうか。

ノンコンスタントトップスピードなども歩行感覚を再現する上では採用しても良さそうです。自然な歩行を再現するのに役立ちそうです。ただし使い方を誤れば酔いに繋がる可能性もありそうです。

回転操作で言えば、ルックアラウンドローテーションが最も自然そうですね。方向転換の際には体験者に身体ごと回転してもらうのが良いでしょう。左右の回転は特に酔いやすいので、身体ごと動かすのが最良だと思います。

テレパスについてはコンテンツの内容次第ではかなり良さそうです。オープンワールドでもマップなどからパスを引ければ良い形に収まる可能性が高いと思います。

おわりに

今回はQuest2とコントローラーで実現可能な範囲で、オープンワールドを歩くための歩行システムについて考察しました。しかし、当然ながら前提に当てはまっていれば上記の方法がどんな時でも最良とは限りません。 作りたいコンテンツの要件、世界観、想定されるプレイヤーの年齢層、色々な要素を加味して移動方法を決定すべきでしょう。酔いやすさが~とか考えていても、時にはシンプルな方法が一番良いということもあるはずです。加えて、本記事の内容には検証を行っていない部分も存在します。(チキンアクセラレーションなどは検証済みですが、テレパスなどは未検証です。)まだまだ机上の空論ですので、もし記事を見て思うことがあれば是非TwitterのDMで送り付けて頂けると幸いです。

次回の記事では上記のシステムを実際にUnityで実装してみる予定です。それではまた!

参考

https://www.moguravr.com/waltz-of-the-wizard-telepath-move/
https://udasankoubou.blogspot.com/2017/05/vr.html
https://milkyway8008.hatenablog.com/entry/2020/01/31/014244

Discussion