はじめまして、Backと申します。
みなさん動的生成され、サブレベルに割り当てられたステージを作ったことはありますか?動的に生成されるとNavMeshがきちんとステージ同士でつながっているか、そもそも壁や穴でプレイヤーの到達できない箇所が出てくるのではないかなど不安に思うところが多くあります。
それらの不安を解消する方法を探していきましょう。
目的
静的ステージ上にあるポイントAからサブレベルに割り当てられ動的に生成されるステージ上にあるポイントBの間をゲーム開始すぐにパス探索する。
状況
Bのあるステージはレベル詳細画面でInitially LoadedとInitially Visibleにチェックを入れておく。またAとBの間には狭い隙間が存在する。

目次
- パス探索の方法
- デバッグの方法
- 探索が失敗する要因
開発環境
UnrealEngine5.3
Project Settings の Navigation System -> Runtime Generation を Dynamic
パス探索
パス探索には二つの方法があります。
1. Find Path to Location Synchronously
同期的にNavMeshを使った経路探索ができます。戻り値から探索結果、探索過程の情報を得ることもできます。
pathfindingContextは探索を行うNavMeshに対応するPawnを割り当てましょう。今回はプレイヤーなのでGetPlayerPawnです。
2. MoveToでPawnを動かす
実際にPawnを動かすため処理は重めですが、ドアに近づいたらカギを使用したり、なぞ解きをしたりする機能をもたせることでより本番に近い動作をさせることができます。
今回はギミックも何もないため1の方法を使用します。
デバッグ方法
Find Path to Location Synchronouslyの戻り値からPathPointsを取得
PathPointsをForLoop
DrawDebugSphereで描画
これによりAからBまでの探索経路を可視化することができました。

探索が失敗する要因
この画像を見てください。なぜNavMesh同士の間が空いているのか?

いくつか原因が考えられました
- 隠れたCollisionにふさがれている
- RecastやプレイヤーのagentSizeが大きすぎる
- 近くのアクタがNavmeshに影響を与えている
- 床のジオメトリが複雑でNavMeshのMaxStepを超えている
- Navmeshのバグ
原因究明のためワイヤーフレームをみたり、近くのアクタのCan Ever Affect Navigationをオフにしたりしました。悩んでいると...あれ...なんか壁とNavmeshの間空きすぎじゃない?agentSize変更したはずでは...?
原因はProjectSetting->NavigationSystem->Supported AgentsのAgentSizeが大きすぎるでした!
SupportedAgentの数だけ動的にRecastが生成されるのでAgentSizeが上書きされるようです。

まとめ
というわけで無事探索成功です。
SplineやNiagaraと組み合わせて道筋を可視化することもできそうです。また、NavMeshをDynamicに設定しておけば動的にステージを生成していても再度NavMeshが作られるため動的生成だろうと静的だろうとあまり挙動は変わらなそうです。