読者です 読者をやめる 読者になる 読者になる

たこやき部屋

SteamVRを使って、Unityでゲームを開発したい

VRボンバーマンを作りたい その12(移動の制限)

VRTK Ver2.2.1の記事です。
Ver3になって使い方が色々と変わっています。ついでに名前も「SteamVR Unity Toolkit」から「Virtual Reality Toolkit」へ変わっています。
使い方はこちらの記事を参照してください。
takoyakiroom.hatenablog.com(以上、2017/02/04 追記)


敵の動きを作ろうと思っていたけど、いつの間にか自分の動きを作っていた・・・

前回NavMeshを使って敵の動きを作ろうとしていたけれど、その前に自分の動きを何とかしようと改造を試みちゃいました。
というのも、この斜め移動問題を解決したかったから。
f:id:takoyakiroom:20161023222338j:plain


まず、自分の動きもNavMeshベースにします。
NavMeshはこんな感じ。これが移動可能な場所。
f:id:takoyakiroom:20161105214601j:plain

で、自分の周りに9つのPlaneを敷きます。
デバッグがやりやすいよう、Planeを半透明の白にしています。
f:id:takoyakiroom:20161105214846j:plain
行けない場所はPlaneでフタをしてNavMeshを隠します。
また、行ける場所はPlaneを消して、NavMeshを表に出してあげます。

こうしないと、NavMeshの上に壊せる壁があった場合、壁に手を突っ込んでテレポート用のポインタでポイントすると、移動できてしまうからです。
これは、壁の中からなら壁の下にあるNavMeshにポイントできてしまうからです。
(但し、移動しても「いしのなかにいる」って状態になるけど)

「んじゃ、壁の下にあるNavMeshにはフタをしよう」という作戦です。


NavMeshでの移動を可能にするには「VRTK_DashTeleport」の「Nav Mesh Limit Distance」に「0」以外の値を入れます。(Dash Teleport以外、例えばBasic Teleportでも同様の指定が可能です)
また、Planeへテレポートできないようにするには、「Ignore Target With Tag or Class」にタグかクラスを指定します。
今回はフタの役目をするPlaneには「Wrong」のタグを付けました。
f:id:takoyakiroom:20161105222248j:plain

ちゃんと機能してるで!
f:id:takoyakiroom:20161105221709j:plain
ちなみに、テレポート用のポインタは1マス分しか届かないようにしているので、手がすんごい長い人じゃない限り2マス先には行けません。タブン


次に、上に壁のないPlaneは無効にし、壁のある場合はPlaneを有効するようスクリプトを組んで、試して見ました。
f:id:takoyakiroom:20161105220434j:plain
○の場所は移動可能なため、Planeが消えます。
×の場所は移動不可能なため、Planeが有効になります。

壁をどかすとこんな感じ。壁で隠れてたPlaneが出てくる。
f:id:takoyakiroom:20161105220435j:plain

さてさて、これにもうちょい手を入れて、斜め移動問題を解決しよう!

f:id:takoyakiroom:20161105221034j:plain
こんな条件を追加してみました。
①には、②か④が通れないと行けない
③には、②か⑤が通れないと行けない
⑥には、④か⑦が通れないと行けない
⑧には、⑤か⑦が通れないと行けない

上の画面だと②⑤が通れないので、③のPlaneが有効になって、斜め移動が不可能になります。
で、もし②が壊れれば、②にも③に行けるようになります。

うーん、移動に関しては、もうコレで良いだろうって思ってるだけどどうだろうなあ。