[UE4] ナビゲーション機能を提供するクラス-1

検証バージョン: UE4.26.0
　本記事では、ナビゲーションシステムに関連するアクターやコンポーネントの機能、使い方などを紹介します。

# Actor
　ナビゲーションの機能を持つアクターはデフォルトで幾つか用意されており、これらの機能を利用することによってナビゲーションの機能を実現したり、サポートすることができます。以下のようにデフォルトセットで用意されたものはレベル上に直接配置することで機能するようなものもあれば、システムで自動的に生成されるようなものもあります。これらのアクターについて、主要なものを幾つかをピックアップして説明しています。
![2020-12-18_10h10_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/e5530049-5ea0-7dc1-62e5-a886cc4692e9.png)

## Nav Mesh Bounds Volume
　このアクターは、ナビメッシュが作られる範囲をボリュームで指定するアクターです。ナビゲーションの機能を使う場合はまずこのアクターを配置しておく必要があります。逆に言えば、この範囲内にナビメッシュが生成されるため、エージェントはボリュームの範囲内でのみ稼働することができます。ボリュームの外にエージェントがいる場合はナビメッシュが作成されないのでAIでの進行や制御ができません。ナビメッシュが生成される範囲をボリュームで指定するので、ボリュームの形状を変えたり頂点の編集をすることも可能です。

![2020-12-18_10h48_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/459cbbe1-6bc4-fc64-187b-7244b9788cde.png)

　ナビゲーションのバウンスには、特定のエージェントのみをサポートするように限定することも可能です。このフラグを制御することによって、ボリュームの範囲を特定のエージェントだけとすることができ、ナビメッシュの生成対象を切り替えることができます。

|項目|説明|
|:--|:--|
|Supported Agents|サポート対象のエージェント指定<br>指定したエージェントのナビメッシュを生成する|

　下の図はボリュームがサポートするエージェントの範囲を限定的なものにした設定の一例です。エージェントのサイズ(S,M,L)によって分類した場合、図ではAgentSのみが有効となっているため、大きいサイズのエージェント(M, L)はナビゲーションすることができないような動作となります。

![2020-12-18_10h51_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/3c673b9f-f20c-c103-5fd2-75005d375535.png)

**[Tips] ナビメッシュを生成する仕組み**
　ナビメッシュはボリュームを配置しただけで自動的に生成されるようになっていますが、以下の図はその過程を簡単に説明したものです。まず`ボリューム`を配置すると、その中にあるジオメトリ（コリジョン）を検出します。それからワールドの中で空間分割して作成されるグリッドの`タイル`をジオメトリの面の上に構築します。それからタイルをポリゴンに沿って分割し、`ボクセル`を敷き詰めるようにナビメッシュを構築していきます。簡単にはこのようなフローでナビメッシュは作られますが、これらのワードはナビメッシュを調整する際によく使うワードなので、覚えておくと調整が捗ります。
![2020-12-18_10h53_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/53218dcd-ddc1-63cf-de50-37e862e511e4.png)

## Nav Modifier Volume
　ナビメッシュに独自の属性(Area Class)を設定できるアクターです。ナビメッシュが作成された範囲上に配置することで、独自の進行条件や重み付けを付与してナビメッシュを上書きすることができます。

![2020-12-18_10h54_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/9a168705-9697-de09-a784-68ba228d7c23.png)

詳細は[Nav Area]の項を参照してください。

## Nav Link Proxy
　2点間のナビメッシュを補完するアクターです。段差や傾斜などナビメッシュが途切れた2点間を紐付けて、連続したエリアとしてナビゲーションを可能とします。ナビリンクプロキシが無い場合は図のような段差があった場合、ナビメッシュが途切れているので2つの領域でナビゲーションすることができません。ナビリンクプロキシでリンクさせてしまえば、図のように途切れていてもリンクさせることでナビゲーションすることが可能です。

![2020-12-18_10h55_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/3528c6a3-4fc6-74eb-bef8-f95c2c66f5a2.png)

　Nav Link Proxyは2種類のリンク（2点間を紐づけるための機能）がありますが、同じような使い方が出来るものの少し違います。`Simple Link`は複数のリンク位置を持つことが出来るという点で有利ですが、Smart Linkはリンクに到達した際のコールバックが取れるなど明確な違いがあるため、用途に応じて使いわける必要があります。

[Simple Link]
・ANavLinkProxyの機能
・Link位置を複数設定可能
・Point Linksが1つ以上登録で有効
・Link Point到達時のコールバックが取得不可

[Smart Link]
・UNavLinkCustomComponentの機能
・Link位置を1つのみ設定可能
・Smart Link Is Relevant = trueで有効
・Link Point到達時のコールバックが取得可

![2020-12-18_10h55_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/d7e96d06-0728-ce51-93ae-233d7c9de7a2.png)

|項目			|説明|
|:--			|:--|
|**Simple Link**	|**ANavLinkProxyが提供する2点間のリンクを行うSimpleLinkの機能**	|
|**Point Links**	|**2点間のリンク情報(FNavigationLink)**	|
|Left			|Simple Linkで補完する2点の左の座標を指定	|
|Right			|Simple Linkで補完する2点の右の座標を指定	|
|Left Project Height	|Simple Linkで補完する2点の左の座標の投射距離指定<br>Z方向の補間を行う距離	|
|Right Project Height	|Simple Linkで補完する2点の右の座標の投射距離指定<br>Z方向の補間を行う距離	|
|Snap Radius		|Link Pointの左右の点に対する有効半径の指定<br>大きいほどLinkへアクセスしやすい|
|Snap Height		|Link Pointの左右の点に対する有効高さの指定<br>大きいほどLinkへアクセスしやすい|
|Supported Agents	|Nav Linkが有効なAgentの指定<br>特定のAgentのみに制限する際に有効		|
|Description		|Nav Linkを識別するための説明<br>EditorOnlyのデータ、メモのための表示項目	|
|Direction		|Nav Linkが有効な方向の指定<br>双方向/左から右/右から左 とリンク方向を指定	|
|Snap to Cheapest Area	|低コストエリア優先スナップ<br>終端位置を低コストエリアの座標に自動補正する	|
|Area Class		|Area Class設定<br>Simple Linkに対するArea Classの設定を行う		|
|**Smart Links**	|**UNavLinkCustomComponentが提供する2点間をリンクするSmart Linkの機能**	|
|Enabled Area Class	|Smart Linkが有効な状態でのArea Classを設定<br>LinkEnabled=true時のNavLinkに影響|
|Disable Area Class	|Smart Linkが無効な状態でのArea Classを設定<br>LinkEnabled=false時のNavLinkに影響|
|Supported Agents	|サポート対象のエージェント指定						|
|Link Relative Start	|Smart Linkで補完する2点のうち左の座標を指定				|
|Link Relative End	|Smart Linkで補完する2点のうち右の座標を指定				|
|Link Direction		|Nav Linkが有効な方向の指定<br>双方向/左から右/右から左 とリンク方向を指定	|
|Link Enabled		|Smart Linkの有効Area切替<br>EnableAreaClassとDisableAreaClassを切替可能	|
|Smart Link is Relevant	|Smart Linkの有効/無効切替<br>有効な場合SmartLinkが適用される	|
|**Broadcast**	|**定周期で特定のCollisionChannelにトレースを実行して検出を通知する機能<br>非稼働の機能、UNavLinkCustomComponent::BroadcastStateChange参照**	|
|Notify when Enabled	|Enabled設定時の通知許可設定<br>LinkEnabled=true時に通知を有効にするか	|
|Notify when Disabled	|Disabled設定時の通知許可設定<br>LinkEnabled=false時に通知を有効にするか	|
|Broadcast Radius	|状態変更通知を有効半径<br>0.0以上の設定で有効	|
|Broadcast interval	|状態変更通知の検知周期<br>0.0以上の設定で有効	|
|Broadcast Channel	|状態変更通知を行う対象のコリジョンチャネル指定	|
|**Obstacle**		|**NavLinkProxyにBox形状の障害物エリアを追加する機能<br>Smart Link Is Relevantが有効時に機能する**	|
|Create Box Obstacle	|Nav Linkに障害物用のBoxを追加するかどうかの指定	|
|Obstacle Offset	|追加するBoxの原点からのオフセット座標指定	|
|Obstacle Extent	|追加するBoxのサイズ指定	|
|Obstacle Area Class	|追加するBoxに割り当てられるArea Classの指定	|

## Navigation Testing Actor
　Navigation Testing Actorはその名前が示す通り、ナビゲーションの機能をテストするためのアクターです。RecastやInvokerなど、複数のナビゲーション機能を持っているため、ローカルで簡単なテストをしたい時などに利用することができます。2つのTesting Actorをリンクさせることでパス検索テストなども可能です。
![2020-12-18_11h28_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/e7b6d60a-436d-4988-c3ba-b7b8047af8f1.png)

|項目			|説明|
|:--			|:--|
|**Navigation**		|	|
|Invoker Component	|Invokerテスト用のComponent指定<br>独自のComponentを設定することでNavmesh生成エリアのテスト可能|
|Tile Generation Radius	|Navmeshを生成可能なタイルまでの距離<br>Project設定により有効、Invokerの機能		|
|Tile Removal Radius	|Navmeshの生成を抑止するタイルまでの距離M<br>Project設定により有効、Invokertの機能	|
|**Agent**		|	|
|**Nav Agent Props**	|	|
|Nav Agent Radius	|自身が持つCapsuleComponentの半径を指定 (テスト調整用)	|
|Nav Agent Height	|自身が持つCapsuleComponentの高さを指定 (テスト調整用)	|
|Nav Agent Step Height	|Navmeshの生成段差値<br>隣接Objectに対して指定の値だけZ値を補完してNavmeshを生成<br>※ 未使用	|
|Nav Walking Search Height Scale	|NavWalking設定時に投影する高さに適用するスケール係数<br>※ 未使用	|
|Preferred Nav Data	|NavigationをサポートするNavigationDataの指定<br>ここでSupportAgentに登録された内容と一致しない場合は利用できない<br>※ 未使用	|
|Can Crouch		|移動モード「しゃがみ」許可<br>※ 未使用	|
|Can Jump		|移動モード「ジャンプ」許可<br>※ 未使用	|
|Can Walk		|移動モード「歩行」許可<br>※ 未使用	|
|Can Swim		|移動モード「泳ぎ」許可<br>※ 未使用	|
|Can Fly		|移動モード「飛行」許可<br>※ 未使用	|
|Querying Extent	|青色Box(仮想NavmeshVolume)のサイズ指定<br>NavmeshVolumeのサイズ調整の目安	|
|**Agent Status**	|	|
|Projected Location	|投射座標 (自動計算)<br>Querying Extentで示すBoxがNavmeshの有効範囲内に存在する場合の座標<br>Navmeshエリア外にある場合はZero Vectorを示す	|
|Projected Location Valid	|投射フラグ (自動計算)<br>Querying Extentで示すBoxがNavmeshの有効範囲内に存在する場合trueとなる<br>Navmeshエリア内に存在するかどうかの指針となる	|
|**Pathfinding**	|	|
|Search Start	|Path Test実施フラグ<br>有効な場合、Navigation Testing Actor同士のパス検索テスト実施する	|
|Cost Limit Factor	|コスト制限因子<br>オープンリストに許可される最大ノードコストを計算するために使用される	|
|Minimum Cost Limit	|最小制限コスト値<br>短いパスで大きな偏差を許容するために使用される最小コスト	|
|Backtracking	|パス検索逆方向テストフラグ<br>有効な場合、TestingActorのパステストをOtherからSelf方向(逆方向)に実施する<br>NavLinkなどリンク方向が限定されているケースなどでは結果が変わる	|
|Use Hierarchical Pathfinding	|HPA*探索アルゴリズム使用許可フラグ<br>有効な場合、HPA*を使用したパス検索を実行	|
|Gather Detailed Info	|A*探索アルゴリズム使用許可フラグ<br>有効に設定、かつUse Hierarchical Pathfindingをfalseに設定した時、パス検索時にA*探索アルゴリズムを使用したパス検索を実行	|
|Other Actor	|パス検索テスト対象Navigation Testing Actor<br>指定したNavigation Testing Actorとパス検索テストを実行する	|
|Filter Class	|パス検索テスト時Query Filterクラス<br>パス検索テスト時に特定のAreaをフィルタリング(回避)してパス形成を実行	|
|Offset from Corners Distance	|パス検索時Edgeオフセット距離<br>NavmeshのEdgeから指定距離だけ離れた位置をパス検索する<br>最短距離進行時に壁際を進行させたくない場合に有効	|
|**Query**	|	|
|Draw Distance to Wall	|隣接壁パス描画<br>最も近い壁(Navmeshの境目)までのパスを描画<br>現在位置とNavmesh境界上の目安となる	|
|**Debug**	|	|
|Show Node Pool	|近隣ノードプール表示<br>隣接するノードプールのコスト等を表示する (表示内容はCost Display Mode)<br>表示の更新タイミングはShowStepIndexを変更時、またはActor再配置後	|
|Show Best Path	|最適パス表示<br>Node Pool表示時に現在の最適パス(赤色)の表示指定	|
|Show Diff with Previous Step	|境界表示指定<br>Node Pool表示時にどのノードが現在のA*ステップで修正されたかを緑線で示す	|
|Should be Visible in Game	|Testing Actor表示フラグ<br>ゲーム実行中にNavigation Testing Actorを表示するかどうかの指定	|
|Cost Display Mode	|コスト表示タイプ<br>Node Pool表示時のモード指定	|
|Text Canvas Offset	|コスト表示テキスト位置補正用オフセット<br>Node Pool表示時のテキストの視認性が悪い場合に調整	|
|Show Step Index	|A*アルゴリズムから収集された詳細データの表示レベル<br>Node Pool表示時の範囲指定	|
|**Pathfinding Status**	|Testing Actor同士のパス検索テスト結果を示す (自動更新のため編集不可)	|
|Path Exist	|パス存在フラグ<br>パスが生成可能な場合trueとなる	|
|Path Is Partial	|部分的パス形成フラグ<br>生成したパスが消失/不完全な場合trueとなる	|
|Path Search Out Of Nodes	|パス検索外フラグ<br>パス探索アルゴリズムが技術的な限界に達したときにtrueとなる	|
|Pathfinding Time	|パス検索時間<br>パス検索が完了までの時間[ms]を表示	|
|Path Cost	|パス検索コスト<br>現在のパスに対する総コスト	|
|Pathfinding Steps	|パス検索ステップ数<br>パスが複雑になるほどStep数が増加し検索コストが上昇	|

![2020-12-18_11h51_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/7e77c124-9264-477b-db67-3aec5170d03f.png)

## Recast Navmesh
　ナビメッシュを生成するために必要な情報を定義するアクターです。ここで定義されたパラメータをベースとしてナビメッシュを生成します。ナビメッシュバウンスはナビメッシュを生成する範囲を定義するものですが、このRecastNavMeshは実際にナビメッシュを生成する補助用のアクターです。このアクターが他のアクターと違う点は、ナビメッシュバウンスがレベル上に配置されたり、ナビメッシュビルド時に自動で生成されるということです。
![2020-12-18_12h07_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/62c2eea5-e1e7-339f-a881-43b1d975bbe1.png)

　ナビメッシュの生成に関する情報以外に、ナビメッシュの構築条件やランタイムでの動作、ナビメッシュに関連するデバッグ表示の機能も持っている多機能なアクターです。このように多くの調整可能な項目ことから分かるように、ナビメッシュの調整を行う場合はここを調整することが多いかと思います。
![2020-12-18_12h08_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/92fa694d-a12e-a306-c502-cf422de8cbea.png)

|項目			|説明|
|:--			|:--|
|**Display**		|	|
|Draw Triangle Edges	|三角ポリゴン表示<br>ナビメッシュを三角ポリゴンとして分割した描画表示	|
|Draw Poly Edges	|ポリゴン表示<br>タイル単位で生成されるポリゴンを表示<br>タイル内にObjectがあるとPolygonを再分割する	|
|Draw Filled Polys	|ポリゴン塗りつぶし表示<br>Navmeshの有効範囲を視覚的に表示する	|
|Draw Nav Mesh Edges	|ポリゴン境界線の表示<br>Navmeshの有効範囲の境界線を視覚的に表示<br>境界線で囲まれている範囲内がNavmeshの有効エリアとなる	|
|Draw Tile Bounds	|タイル領域の表示 (黄色)<br>World内で分割されたタイルを表示する	|
|Draw Path Colliding Geometry	|Navmeshが有効なジオメトリ描画の表示 (白色)<br>DrawFilledPolysと併せて有効にすると視認しやすい	|
|Draw Tile Labels	|タイルラベル表示<br>タイル毎に割り当てられる一意の識別番号を表示<br>World基点のX,Y,Z位置情報を持つ	|
|Draw Polygon Labels	|ポリゴンラベル表示<br>ポリゴン毎に割り当てられる一意の識別番号表示<br>Polygon毎にX,Yの2点情報を持つ	|
|Draw Default Polygon Cost	|ポリゴンコスト表示<br>ポリゴン毎に保持する初期コスト/固定コストを表示	|
|Draw Labels on Path Nodes	|検索パスノードラベル名表示<br>Navigation PathのDebug Drawが有効時のみ有効パスを表示<br>(Navigation PathのEnable Debug Drawingで有効化)	|
|Draw Nav Links	|Nav Link Proxyの有効リンク表示<br>有効なリンク位置を矢印線で表示	|
|Draw Failed Nav Links	|Nav Link Proxyの無効リンク表示<br>無効なリンク位置であったとしても対象のナビリンクを矢印線で表示	|
|Draw Clusters	|Navmeshクラスタ表示<br>Geometryが持つクラスタを表示、隣接タイルかどうかを識別可能	|
|Draw Octree	|Nav Octree 表示<br>World上に白線でNav Octreeを表示する	|
|Draw Octree Details	|Nav Octree 詳細表示<br>Nav Octreeを表示する際にOctreeに含まれるStatic Meshも併せて表示する	|
|Draw Offset	|デバッグ描画Zオフセット値<br>デバッグ用ナビメッシュを描画時のZ補正値<br>視認性を上げるためのオプション	|
|Enable Drawing	|デバッグ描画設定<br>Navmesh関連のデバッグ描画を有効にするかの設定、Offの場合は無効化	|

![2020-12-18_15h22_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/e335008d-fa40-7aa9-02b6-efc539df31c7.png)
![2020-12-18_15h22_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/62b9458d-d304-e5c8-7277-10dc07654275.png)

|項目			|説明|
|:--			|:--|
|**Generation**	|	|
|FixedTilePoolSize	|使用タイル数固定フラグ<br>使用するタイルの総数をTilePoolSizeで固定するかどうかの指定	|
|TilePoolSize		|使用タイル数<br>FixedTilePoolSizeフラグが有効な場合に固定するタイル数	|
|TileSizeUU		|タイルサイズ指定 [UU]<br>タイル1辺の長さ指定、値が大きいほどポリゴン割が大きくなる	|
|CellSize		|ボクセルセルサイズ [UU]<br>Navmeshを生成するボクセルの幅<br>値が小さい程、Navmeshの精度が良くRecast Memoryが増加	|
|Cell Height		|セル高さ [UU]<br>ボクセル、Navmeshの接地面からの高さ、大きな値は傾斜など高さを補正可能	|
|Agent Radius		|エージェント半径 [UU]<br>指定半径サイズ以上のAgentはNavigation有効、以下の場合対象外となる	|
|Agent Height		|エージェント高さ [UU]<br>オブジェクト同士の高さが設定値未満の場合、通行不可(Null)エリアを生成する	|
|Agent Max Slope	|エージェント最大角度 [deg]<br>傾斜などで角度補正が必要な際に調整する	|
|Agent Max Step Height	|Navmeshの生成をサポートする段差値<br>隣接するObjectに対して指定の値だけZ値の差をカバーしてNavmeshを生成<br>ここで補正された2つの面は同一Tileの扱いとなる	|
|Min Region Area	|最小許容エリアサイズ<br>面積の最小寸法値、これより小さい領域は破棄される<br>領域分割アルゴリズムがWatershed以外かつ1以上で有効 <br>	|
|Merge Region Size	|ナビメッシュマージ値<br>この値よりSpan数が少ない領域は可能な限り大きな領域とマージする<br>領域分割アルゴリズムがWatershed以外かつ1以上で有効	|
|Max Simplification Error	|最大簡略化エラー値<br>ナビゲーション可能な形状をどれだけ単純化できるかの閾値<br>値が大きいほどナビメッシュの形状を単純化するがNavmeshの精度が低下	|
|Sort Navigation Areas By Cost	|ナビゲーションエリアコストソート<br>Navmeshの構築時にコスト順にソートし優先エリアを先に構築<br>有効に設定するとコストでエリアがソートされるがNavmesh生成コストも若干増加	|
|Max Simultaneous Tile Generation Jobs Count	|タイル生成最大ジョブ数<br>値が大きいほどNavmeshを早く構築できるが並列処理による瞬間コストが高くなる<br>値が小さいほどNavmesh構築時間が長くなるが瞬間的なコストを抑える	|
|Tile Number Hard Limit	|ナビメッシュタイル制限数<br>Navmeshタイル数の制限値、Fixed Tile Pool Sizeと競合した場合は最小結果を優先<br>※ 常に2の最も近い乗数に切り上げ	|
|Poly Ref Tile Bits	|ポリゴン参照タイルビット数 (編集不可)<br>現在生成可能なタイル数をBitフラグ数で示した値、2^(Value)が生成可能数を示す	|
|Poly Ref Nav Poly Bits	|ポリゴン参照ナビポリゴンビット数 (編集不可)<br>生成可能な最大タイル数をBitフラグ数で示した値、2^(Value)が最大数を示す	|
|Poly Ref Salt Bits	|ポリゴン参照残ビット数 (編集不可)<br>生成可能な残タイル数をBitフラグ数で示した値、2^(Value)が残生成数を示す	|
|Nav Mesh Origin Offset	|ナビメッシュオフセット<br>ナビメッシュ生成時のタイル生成の基点を原点(0,0,0)から補正するための座標	|
|Region Partitioning	|領域分割アルゴリズム<br>ポリゴン分割のアルゴリズム指定、精度とメモリに影響	|
|Layer Partitioning	|レイヤ分割アルゴリズム<br>ポリゴン分割のアルゴリズム指定、精度とメモリに影響	|
|Region Chunk Splits	|領域チャンク分割数<br>ChunkMonotone時の分割ポリゴン数を指定、精度とメモリに影響	|
|Layer Chunk Splits	|レイヤチャンク分割数<br>ChunkMonotone時の分割ポリゴン数を指定、精度とメモリに影響	|
|Perform Voxel Filtering	|ボクセルフィルタリングボクセルフィルタリングを適用するかどうかを制御する<br>生成されるNavmeshは境界上にフィットするが生成パフォーマンスが若干上昇する	|
|Mark Low Height Areas		|Low Height Areaマーキング<br>有効な場合、Low Height Areaを適用して無効な場合はDefault Areaとする	|
|Use Extra Top Cell When Marking Areas|有効な場合NavModifierの領域適用時に1Cell分の高さを補正する|
|Filter Low Span Sequences	|Lowエリアフィルタタイルシーケンス設定<br>有効な場合に特定距離内の領域をLowHeightエリアとする	|
|Filter Low Span from Tile Cache	|Lowエリアフィルタタイルキャッシュ設定<br>有効な場合に特定距離内の領域をLowHeightエリアとする	|
|Do Fully Async Nav Data Gathering	|Geometory Data 同期収集設定<br>有効な場合、1つのTask ThreadとGame ThreadでNavmeshの構築を行う<br>無効な場合は空きのTask Threadを利用するため高速に構築する	|
|**Query**					|	|
|Heuristic Scale				|ヒューリスティックスケール<br>A*経路探索に使用するヒューリスティックh(n)に対するスケール値	|
|Vertical Deviation From Ground Compensation	|地面からの垂直偏差補正値<br>Navmeshポリゴンと移動可能ジオメトリの間の誤差を補正するための高さ補正値	|
|**Runtime**				|	|
|Force Rebuild OnLoad			|ロード時強制リビルド<br>falseの場合Navmeshが正常に読み込まれた後の最初のリビルドをスキップする	|
|Auto Destroy when No Navigation	|ナビゲーションデータ自動破棄設定<br>ナビゲーションシステムが存在しない、クライアント動作時にナビメッシュのロードが不要な場合など、自動的にナビゲーションデータを破棄する	|
|Runtime Generation			|Runtime生成設定<br>Static：Navmeshの動的な再構築は行わない<br>DinamicModifiresOnly：NavModifierに変更が発生した場合にのみ再構築を実行<br>Dynamic：StaticMeshなどを含む全てのDirtyArea検出時に再構築を行う	|
|Observed Paths Tick Interval		|パス監視周期 [Sec]<br>値を小さく設定するほどパス監視の周期が短くなりパスの精度が上昇	|
|Can Be Main Nav Data			|メインナビデータ登録許可<br>Nav Sysがパス検索などを実行する際にこの設定が有効なNav Dataのみを利用する	|
|Can Spawn On Rebuild			|リビルド時ナビデータ生成<br>ナビメッシュのリビルド時、Nav Dataがレベル上に存在していない場合はパーシスタントレベルに生成される	|

![2020-12-18_16h38_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/b7ec5e33-eb2b-fd0a-f5d7-0c90cbfcc0a1.png)
![2020-12-18_16h38_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/4dd020ff-3e4c-a307-efe9-047e2a3e9d59.png)

## Nav System Config Override
　ナビゲーションシステムの設定を上書きすることが可能なアクターです。通常、そのシーンで利用するナビゲーションシステム機能はWorld Settingsで設定可能な1つが動作するはずですが、このアクターを利用する場合は、ナビゲーションシステムを上書きして運用することができます (ただしランタイムでは不可)。
![2020-12-18_11h52_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/c27cd4e1-418d-bdf4-9c82-c09af3884c2b.png)

# Component
　ナビゲーションの機能を持つコンポーネントもデフォルトで幾つか用意されており、これらの機能を利用することによってアタッチしたアクターにナビゲーションの機能を提供することができます。
![2020-12-18_10h46_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/407f8226-3df1-5d66-70d2-dfa54ae0d330.png)

## Nav Modifier Component
　ナビメッシュに独自の属性(Area Class)を設定できるコンポーネントです。エリアクラスの効果をFailsafe Extentで指定した範囲に適用することができます。アタッチしたアクターがStaticMeshComponentやCollisionを持つ場合は表示に沿うこと（ジオメトリ）を優先するような動作となります。
　Modifierが提供する機能の主な内容はArea Classを提供することなので、機能の詳細は[Nav Area]の項を参照してください。
![2020-12-18_16h44_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/79eecf33-9f3c-e75f-1da6-1d0cf60ba060.png)

## Nav Link Component
　2点間のナビメッシュを補完するコンポーネントで、Nav Link Proxyのコンポーネント版のようなイメージです。このコンポーネントをアクターに追加することで任意にリンク機能を付与することができます。ANavLinkProxyはSmart Link, Simple Linkを持っていますが、このコンポーネントはSimple Linkの機能を提供するだけで、Smart Linkの機能はもちません。
![2020-12-18_16h44_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/31f916fd-5e56-c440-ba71-8aebdc5d2086.png)

## Navigation Invoker Component
 これは特殊なコンポーネントで、ナビメッシュの生成範囲を制限するためのコンポーネントです。通常はナビメッシュバウンスの範囲内にナビメッシュを生成しますが、これをアタッチするとInvokerを中心にナビメッシュが生成されるようになります。このInvokerの機能を有効にする場合は、プロジェクト設定の項目から設定します。

![2020-12-18_16h43_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/df4d3e32-7b0b-6069-041c-f5ad38b0e06c.png)

|項目|説明|
|:--|:--|
|Tile Generation Radius|ナビメッシュ生成開始距離<br>現在位置から指定の距離にあるタイルをナビメッシュの生成範囲とする|
|Tile Removal Radius|ナビメッシュ削除開始距離<br>現在位置から指定の距離にあるタイルのナビメッシュが削除の範囲となる<br>Tile Generation Radiusより大きい値の場合に有効|

　これはInvokerを有効にしたコンポーネントを持つアクターをナビメッシュバウンスの真ん中に配置した時の様子です。ナビメッシュバウンスの全体にナビメッシュが生成されるのではなく、アクターを中心に一定の距離内にあるタイルがナビメッシュ生成対象となって、ナビメッシュを生成していることが分かります。
![2020-12-18_16h41_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364110/c54a93c9-40af-aebb-2eec-9055ecd59948.png)
 
# その他
 直接的にナビゲーションの機能は提供しませんが、ナビゲーションに影響を及ぼすような機能を紹介します。
## ActorComponent 
　全てのコンポーネントの基礎クラスです。

|項目|説明|
|:--|:--|
|Can Ever Affect Navigation|ナビゲーションへの影響<br>有効にした場合、ジオメトリを持つような場合は障害物となるなどナビゲーションに影響を及ぼすかどうかを指定|

## PrimitiveComponent
　UBrushComponentやUMeshComponentといった、何らかのジオメトリを持つコンポーネントの基礎クラスです。

|項目|説明|
|:--|:--|
|Fill Collision Underneath for Navmesh|コリジョン領域ナビメッシュ生成非許可設定<br>有効にした場合、自身と地面の間にナビメッシュを生成しない設定<br>NavmeshBoundsVolume内に存在している時に有効となる|

## LandscapeProxy, StaticMeshActor
　どちらも全く別物のアクターですが、レベル上に配置されてナビメッシュの生成に影響を与えるケースが多いということで同じ設定項目を持つクラスです。

|項目|説明|
|:--|:--|
|Navigation Geometry Gathering Mode|ジオメトリ検出モード<br>ワールドに追加されてからNavOctreeを即時更新するかどうかの指定|