AbstractGraph を作成する

AbstractGraph は、別の種類の NavData です。これは、NavMesh 内の考えられるパスを抽象的に、軽量に、静的に表したものです。

AbstractGraph は、広いワールド内で非常に長いパスを検索するために使用します。パスの検索は、AbstractGraph と、始点と終点にのみ存在する NavMesh を使用して実行することができます。AbstractGraph を使用すると、NavMesh のみを使用する場合よりも早くパスを検索できます。その上、AbstractGraph を使用するとメモリと CPU 時間を節約することができます。

次の図は、始点と終点にのみ存在する NavMesh と AbstractGraph を使用して計算されたパスを示しています。

次の図は、ボックスの範囲が原因で、NavMesh だけではパスを検索できない様子を示しています。ボックスの範囲を大きくすると、作業メモリの不足によりパス ファインディングが失敗します。

AbstractGraph を作成する

AbstractGraph は、セル ボックスが指定されている NavData に対してのみ作成することができます。セル ボックスの詳細については、「fixed-step または grid-based 分割を使用する」を参照してください。

AbstractGraph はデフォルトでは作成されません。AbstractGraph を作成するには、m_abstractGraphParamsm_doGenerateAbstractGraphtrue に設定する必要があります。このパラメータは、GeneratorAbstractGraphParameters のメンバーです。

NavData をカバーするために 1 つまたは複数の AbstractGraph を使用することができます。AbstractGraph でカバーするセル ボックスの長さを定義するには、GeneratorAbstractGraphParameters::m_extentsInNumberOfCells を設定します。このプロパティを使用して具体的なパスで見込まれるサイズを制限することができます。デフォルトでは 0 に設定されており、NavData 全体をカバーする 1 つの AbstractGraph が生成されます。

GeneratorAbstractGraphParameters::m_workingMemorySizeLimit パラメータは WorkingMemory のサイズの制限(バイト単位)を設定します。これは、AbstractGraph 内のエッジのコストを計算する際に MultiDestinationPathFinderQuery を実行するのに使用されます。

AbstractGraph に追従する

AbstractGraph は静的であるため、実行時に動的な NavMesh、NavTag、NavGraph の変更を考慮しません。AbstractGraph をトラバースする、またはトラバースしないように AStarQuery を設定するには、SetAbstractGraphTraversalMode() を呼び出し、PATHFINDER_ TRAVERSE_ABSTRACTGRAPHS または PATHFINDER_DO_NOT_TRAVERSE_ABSTRACTGRAPHS のどちらかを渡します。NavMesh 上の伝達は、開始位置および終了位置にある、AbstractGraph によってカバーされているセルに制限されます。

AbstractGraph を使用してパスが検出されると、AStarQuery::m_abstractPath と通常の AStarQuery::m_path にそのパスが設定されます。m_abstractPath には AbstractPath が含まれ、m_path には最初の具体的なパス(始点から最初の AbstractGraph ノードまで)が含まれています。

AbstractPath に追従するには、次の AbstractPath ノードに対して AStarQuery を実行して、Bot が追従できる次の具体的なパスを検索します。AbstractGraph の追従例は、LabEngine サンプル ライブラリに提供されています。LabEngine::AbstractPathFollower クラスでは、次のものを使用して具体的なパスを検索するためのクエリが作成されます。

注:AbstractGraph は動的ではありません。AbstractGraph では、実行時に NavMesh に開けられた穴や、NavTag のトラバース能力およびコストは考慮されません。ただし、LabEngine::AbstractPathFollower クラスでは、わずかであれば動的な NavMesh の使用が制限付きで許容されます。