VRボンバーマンを作りたい その3(移動について)
VRTK Ver2.2.1の記事です。
Ver3になって使い方が色々と変わっています。ついでに名前も「SteamVR Unity Toolkit」から「Virtual Reality Toolkit」へ変わっています。
使い方はこちらの記事を参照してください。
(以上、2017/02/04 追記)
今回は自分の「移動」について、もうちょっと作り込んでいきます。
1つ目は、テレポート可能・不可能な場所について。
VRTK(SteamVR Unity Toolkit)を使ってテレポートを行う場合、何も設定していないと「壁」にマーカを当てても移動可能とみなされ、テレポート可能になってしまうんです。
「じゃ、どーするんだよー!」と調べてみたら、「特定のTagが付いている場合は無視する」的な機能があったのでコレを活用しよー!
「VRTK_BasicTeleport」の「Ignore Target With Tag Or Class」、ここに設定されているTagかClassは無視されるらしい。
壁のアセットに「Wall」のTagを設定してと・・・
「VRTK_BasicTeleport」の「Ignore Target With Tag Or Class」に「Wall」と設定。
動かしてみると・・・
確かに壁には移動できない!
壁以外には移動できる! できた~~!!
なお、「Ignore Target With Tag Or Class」の下にある「Nav Mesh Limit Distance」でも移動可・不可の場所を設定できるみたいで、本来はこちらを使うのが良いのかな?
自分でちょこっと試した事をまとめておきます。
この方法の場合、移動可能は範囲を「NavMesh」で示すらしい・・・(ナビメッシュ?初めて聞いた単語だ、敵とかのキャラを動かす為の通り道みたいなモノ?)
「Navigation」でNavMeshを設定したいオブジェクトを選ぶ。「Navigation Static」にはチェックを入れておく。
「Bake」のタブにもいろいろ設定できる項目があるが、今回はそのまま「Bake」。
すると、オブジェクトに水色の境界ができて、これが「NavMesh」とのこと。なるほど!
「VRTK_BasicTeleport」の「Nav Mesh Limit Distance」がデフォルトの「0」だと、NavMeshは無効になるので適当に値を入れる。
実行すると、NavMesh内は移動可能。
NavMesh外は移動不可。
ってな感じらしいですが、ちゃんと調べていないので使う時はちゃんと調べてから使ってください。
さて、1つ目のテレポート可能・不可能な場所についてはここまで。
2つ目はVRゲームをやった人は誰でも経験のある、あの「顔ツッコミ問題」について考えたいと思います。
「この壁の先どうなっているんだろう?」と、壁を無視して顔を突っ込んで先を見てしまうアレです、アレ!
今回ヘッドセットのある頭の部分が炎触れたらアウトにしたいのだけれど、ずるい俺は「んじゃ、炎がきたら壁に顔突っ込めば避けれるな」とか考えるワケです。
この対処は簡単で「[CameraRig]」に「VRTK_PlayerPresence」のスクリプトを追加するだけ。
これで頭が何かにぶつかっても、中に入れないようになります。
んじゃ、壁にぶつかった時、どういう動きになるかというと・・・
ゲームでよく見かけるこれ↓
ん? 壁にぶつかったプレイヤーはムーンウォークするの?
ってそんな事はなく、ぶつかられた「壁の視点」でみた時がこの動きで、「プレイヤーの視点」でみると(実際にプレイしてみると)、ぶつかった壁・床・等など「VRの世界全部」を前に押して歩いているという、何とも不思議な感覚になります。
・・・う~ん、実際VRで体験しないと説明しにくい
移動に関してはこれで特に問題ないかな~?
今回の場合は関係ないけど、RPGとかパズルとかの場合、壁に手をつっこんでテレポートしたら本来はまだ行かせたくない場所に行くことができちゃったとかあるかもです。
こんなふうに・・・
壁が厚くても、がんばれば移動できたりして
ちゃんと確かめないと思わぬ抜け穴があってゲームバランス崩れることありそう、気をつけなきゃ。
最後に、前に撮った「Pool Nation VR」のインチキジャンプショットの動画を載っけておきます。
これくらいなら、ゲームバランスは崩れてはないから対策する必要なしですね!