LoginSignup
10
4

More than 3 years have passed since last update.

[UE4] ナビゲ―ション機能を調整する

Last updated at Posted at 2020-12-19

検証バージョン: UE4.26.0
 本記事では、ナビゲーションの機能を調整する時にどこを変更すればよいか、見ればよいかをまとめたものです。

ナビメッシュの精度を調整する

ナビゲーションデータのCellSizeを調整することで、隣接エリアの精度を調整して滑らかなメッシュを生成できるようになります。
2020-12-18_01h25_18.png

ナビメッシュの傾斜を調整する

ナビゲーションデータのCellHeightAgentMaxSlopeを調整することで、隣接エリアの判定を広くして滑らかなメッシュを生成できるようになります。
2020-12-18_01h28_24.png

ナビメッシュの隙間を補完する

Nav Link ProxyやNav Link Proxy Componentを使用します。段差、高所から降りる、隣接面をカバーするようなケースできます。
2020-12-18_01h29_08.png

ナビメッシュの精度をさらに上げる

RecastNavmeshのRegionPartitioning、LayerPartitioningの方式をMonotoneもしくはChunkyMonotoneに変えることで更に密なメッシュが構築できるようになります(ただし生成コスト増大)。

経路探索に優先度をつける

Nav Areaを作成してNav Modifier Componentを配置しコストに重みづけを行います。
2020-12-18_01h29_29.png

ナビメッシュを動的に更新する

RecastNavmeshのRuntime GenerationをDynamicもしくはDynamic Modifiers Onlyに変更する。Dynamic は全て(StaticMesh)などの変更時にNavmeshの再生成を実施、Dynamic Modifiers Onlyは Nav Modifier の変更時のみにNavmeshの再生成を実施します。
2020-12-18_01h30_21.png

エージェントの種類に応じたナビメッシュを設定する

Project SettingsのSupported Agentsに追加します。Agent数だけNavmeshをレベル上に生成するため、生成コストとメモリに注意する必要があります。
2020-12-18_01h30_46.png

オブジェクトの下部を進行できないようにする

StaticMeshであればbFillCollisionUnderneathForNavmeshを有効にすることで、オブジェクトの下部をヌルエリアを生成できます。

オブジェクト自体にエリアを設定したい

StaticMeshであればIsDynamicObstacle=trueとしてAreaClassからオブジェクトのクラスを設定できます。

オブジェクトの空洞の中に生成されるエリアを埋めたい

NullAreaのModifierを埋め込む、CanEverAffectNavigationを無効にするか、少し工夫が必要です。

サブレベル毎のナビメッシュを展開したい

Dynamicに設定することで予めビルドしたナビメッシュはストリーミングできますが、完全にサポートされていません(ワールドコンポジションのケースなど)。

パスのコストを調整する

NavigaitonTestingAcotrのPathfinging機能を使うとStepとコスト計算を容易に視覚化できます。
2020-12-18_17h30_44.png

パスの軌跡を確認する

NavigationPath::EnableDebugDrawing()を毎フレーム呼び出せばパスを描画し続けることができます。
2020-12-18_19h24_39.png

10
4
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
10
4