概要
Unreal Engine の ナビゲーション システム では、エージェントがパス検索に ナビゲーション メッシュ を使用してレベルをトラバースできます。
エージェントは、ナビゲーションメッシュ内の各ナビゲーションポリゴンのコストを比較することで、目的地までの最適なルートを決定します。ルートに沿ったポリゴンのコストがすべて同じ場合、エージェントはターゲットへの最短パス (通常は直線) を選択します。
Navigation Modifier ボリューム と ナビゲーション クエリ フィルタ を使用して、ナビゲーション ポリゴンのコストを調整することができます。
ナビゲーション モディファイア ボリュームは 領域クラス (Area Class) を使用して、ボリューム内のナビゲーションの デフォルト コスト 乗数を決定します。領域クラスは、エージェントがこの領域に入ったときに適用される初期コストである 領域侵入の固定コスト も定義します。領域クラスは、エージェントがレベル内を移動する方法に影響を与えるのに必要な数を作成できます。
ナビゲーション クエリ フィルタ には、1 つ以上の領域クラスに関する情報が含まれており、ナビゲーション クエリ フィルタによって必要に応じてコスト値をオーバーライドできます。クエリ フィルタは、エージェントがレベル内を移動する方法のカスタマイズに必要な数だけ作成できます。
目標
このクイック スタート ガイドでは、さまざまなエージェントが同じナビゲーション メッシュをターゲットに向かってトラバースする方法に影響を与えるために使用する独自のナビゲーション領域とクエリ フィルタを作成、使用する方法を学習します。
目的
-
ナビゲーション モディファイア ボリュームと一緒に使用する 3 つのカスタム領域クラスを作成する。
-
エージェントが使用する 2 つのナビゲーション クエリ フィルタを作成する。
1 - カスタム領域クラスを作成する
-
[Place Actors (アクタを配置)] パネルに移動して「 Nav Modifier Volume」を検索します。[Nav Modifier Volume] アクタをレベルにドラッグして、Floor メッシュ上に配置します。[Details (詳細)] パネルに移動して [Scale (拡大・縮小)] を X = 2、Y = 6、Z = 1 に設定します。
-
コンテンツ ブラウザ 内で右クリックして、 [Create Basic Asset] セクションの [Blueprint Class] を選択します。
-
[Pick Parent Class (親クラスを選択)] ウィンドウで [All Classes (すべてのクラス)] セクションに行き、矢印を展開します。「Nav Area」を検索して選択します。[Select (選択)] をクリックして、ブループリントに「 BP_Area_Neutral 」という名前を付けます。
-
前の 2 手順を 2 回繰り返し、それらのブループリントに「 BP_Area_Lane1 」および「 BP_Area_Lane2 」という名前を付けます。
-
BP_Area_Lane1 ブループリントをダブルクリックして開きます。ボリューム内を移動する際の [Default Cost (デフォルト コスト)] 乗数と[Fixed Area Entering Cost (領域侵入の固定コスト)] を変更できます。この例では、これらの設定をデフォルト値のままにしておきます。
-
[Draw Color (描画カラー)] バーをクリックして 青 色を選択します。コンパイル して 保存 します。
-
BP_Area_Lane2 ブループリントに対しても上記の手順を繰り返し、[Draw Color] を 赤 に変更します。
-
レベル内の Nav Modifier Volume を選択し、 [Details] パネルで [Area Class (領域クラス)] ドロップダウンをクリックして [BP_Area_Neutral] を選択します。
-
この Nav Modifier Volume を複製して上記の手順に従い、[Area Class] を [BP_Area_Lane1] に変更します。このボリュームを、以下のように横に移動し、レーンを作成します。
-
前述の手順を繰り返しって Nav Modifier Volume を複製し、[Area Class] を [BP_Area_Lane2] に設定します。このボリュームを、以下のように横に移動し、レーンを作成します。
-
これで、各 [Area Class] の値を変更してエージェントがターゲットに向かうパスに影響を与える実験ができます。以下の例では、BP_Area_Neutral と BP_Area_Lane1 の [Default Cost] がいずれも 4 に設定されています。
-
この例では、BP_Area_Neutral と BP_Area_Lane2 の [Default Cost] がいずれも 4 に設定されています。
このセクションの結果
このセクションでは、3 つのカスタム 領域クラス を作成し、レベルに配置しました。また、それらの 領域クラス の [Default Cost] 値を変更して、エージェントがターゲットに向かう移動に影響を与えました。
2 - ナビゲーション クエリ フィルタを作成する
-
コンテンツ ブラウザ 内で右クリックして、 [Create Basic Asset] セクションの [Blueprint Class] を選択します。
-
[Pick Parent Class (親クラスを選択)] ウィンドウで [All Classes (すべてのクラス)] セクションに行き、矢印を展開します。「 Navigation Query Filter」を検索して選択します。[Select] をクリックして、ブループリントに「 BP_QueryFilter1 」という名前を付けます。
-
BP_QueryFilter1 ブループリントをダブルクリックして開きます。[Areas (領域)] セクションの隣の 追加 (+) ボタン をクリックして展開します。
-
[Area Class] の隣のドロップダウンをクリックし、「 BP_Area_Neutral 」を検索、選択します。[Travel Cost Override (移動コストのオーバーライド)] チェックボックスをオンにし、「100」と入力します。
-
前述の手順を繰り返して、 BP_Area_Lane1 と BP_Area_Lane2 をリストに追加します。BP_Area_Lane2 の [Travel Cost Override] チェックボックスをオンにして「100」と入力します。
-
コンテンツ ブラウザ で [BP_QueryFilter1] ブループリントを右クリックして [Duplicate (複製)] を選択します。
-
BP_QueryFilter2 ブループリントをダブルクリックして開きます。領域クラス BP_Area_Lane1 の [Travel Cost Override] チェックボックスをオンにして値を 100 に設定します。領域クラス BP_Area_Lane2 は [Travel Cost Override] チェックボックスをオフにします。
-
ブループリントを コンパイル して、保存 します。
-
レベル内の BP_NPC ブループリントを選択し、 [Details] パネルで [Filter Class (フィルタ クラス)] ドロップダウンをクリックして「 BP_QueryFilter1 」を検索、選択します。
-
[Simulate (シミュレート)] をクリックし、エージェントが ナビゲーション クエリ フィルタ を使用してどのように目的地までの最適なルートを決定しているのかを観察します。BP_QueryFilter1 には最もコストの低いルートとして BP_Area_Lane1 があるので、エージェントはそれを使用してスフィアに到達します。
-
BP_NPC ブループリントを選択して [Filter Class] を [BP_QueryFilter2] に変更します。[Simulate] をクリックして、エージェントがどのように BP_Area_Lane2 領域を使用して目的地に到達するのかを観察します。
このセクションの結果
このセクションでは 2 つの ナビゲーション クエリ フィルタ を作成し、前のセクションの 3 つの 領域クラス を追加しました。また、 領域クラス に関連付けられたコスト値を変更して、異なる ナビゲーション クエリ フィルタ を使用する際のエージェントのナビゲーションを変更しました。