個人的勉強メモ置き場

プログラミングど素人のメモ置き場

NavMeshを今さら勉強したお話 その2

前回の続き
zykbgame.hateblo.jp

前回の最後では目的地まで移動させることが出来たものの、へんてこな場所を通ってしまったのでちょっと改善します。

Meshが浮いてしまう問題をなんとかする

なんか変な挙動をすることがあるなと思っていたらMeshがこのように浮いてしまっていました。

f:id:zykb:20201028065531p:plain

調べたところ

NavigationウィンドウのBakeタブにあるAgent Heightの値を下げる
NavigationウィンドウのBakeタブにあるVoxel Sizeを下げる

のどちらかで改善するようです。ちなみに僕の環境ではAgent Heightは下げても変わりませんでしたがVoxel Sizeを下げるといい感じになりました

f:id:zykb:20201028065534p:plain

エージェントが左を通れないようにする

色々やり方はあると思いますがとりあえずBake設定でごちゃごちゃしてみましょう。

下のようにAgent Radius(エージェントの半径)を0.7にしてBakeしてみます

f:id:zykb:20201028065536p:plain

すると左側にメッシュが生成されなくなりました。Agent Radiusはオブジェクトにエージェントが近づける距離を示しているご様子。


f:id:zykb:20201028072351p:plain


逆にAgent Radiusを0.1にすると大体どこでも通れるようになります。


f:id:zykb:20201028073200p:plain

他の主な設定はこの通り

Agent Radius エージェントが近づける半径
Agent Height エージェントが手が届く高さ
Max Slope エージェントが登れる最大傾斜
Step Height エージェントが登れる障害物の高さ

動かしてみると真ん中を通ってくれるようになりました。

f:id:zykb:20201028074328g:plain

NavMeshObstacleで動的に障害物を作成する

先ほどまでの障害物は静的なオブジェクトなので基本的に動かすことが出来ませんが、NavMeshObstacleを使うことで移動可能な障害物を作成することが出来ます。すごい


NavMeshObstacleコンポーネントを適当なオブジェクトにつけて、Carve(くり抜く)にチェックを入れることでNavMeshに穴が開きます。


f:id:zykb:20201028083624p:plain

f:id:zykb:20201028084111g:plain


移動する障害物を作成することが出来ました。

f:id:zykb:20201028085229g:plain


そのうち続く……