概要
Unreal Engine の ナビゲーション システム では、エージェントがパス検索に ナビゲーション メッシュ を使用してレベルを移動できます。システムには、ナビゲーション メッシュのさまざまな ランタイム生成 手法に加え、特定のターゲットの周りだけにナビゲーションを局地的に作成する方法が用意されています。
Navigation Invoker は、ランタイム時にエージェントの周囲にナビゲーション メッシュを生成するブループリント アクタ コンポーネントです。Navigation Invoker を使用すると、エディタでナビゲーション メッシュを作成する必要性がなくなります。
また、ランタイム時に生成されるタイル数を制限することができます。
目標
このガイドでは、エージェントに Navigation Invoker を使用して、ゲームプレイ中にナビゲーション メッシュを生成する方法を学習します。
目的
-
新しいレベルを作成し、Navigation Invoker を使用するようにナビゲーション システムを設定する。
-
Navigation Invoker を使用してレベル内を歩き回るように ThirdPersonCharacter ブループリントを変更する。
1 - 必要な設定
-
Unreal プロジェクト ブラウザの [New Project Categories (新規プロジェクト カテゴリ)] セクションで [Games (ゲーム)] > [Third Person (サードパーソン)] テンプレートの順にクリックします。
-
[Blueprint (ブループリント)] と [No Starter Content (スターター コンテンツなし)] オプションを選択し、[Create] をクリックします。
このセクションの結果
新しいサード パーソン プロジェクトを作成し、Navigation Invoker について学ぶ準備が整いました。
2 - テスト レベルを作成する
-
メニューバーで [File] > [New File...] の順にクリックします。
-
[Basic] レベルを選択します。
-
[Outliner (アウトライナ)] ウィンドウで Floor スタティックメッシュを選択し、[Details (詳細)] パネルに移動します。[Scale] を [X = 100, Y = 100, Z = 1] に設定します。
-
[Settings] > [Project Settings] の順にクリックして [Navigation System] カテゴリに移動します。[Generate Navigation Only Around Navigation Invokers (Navigation Invokerの周囲にのみナビゲーションを生成する)] チェックボックスをオンにします。
-
[Navigation Mesh (ナビゲーション メッシュ)] カテゴリに移動し、 [Runtime (ランタイム)] セクションまで下にスクロールします。[Runtime Generation (ランタイム生成)] ドロップダウンをクリックして [Dynamic (ダイナミック)] を選択します。
-
[Place Actors (アクタを配置)] パネルに移動し、「Nav Mesh Bounds Volume」を検索します。これをレベルにドラッグして、Floor メッシュ上に配置します。NavMeshBoundsVolume の [Scale] を X = 500、Y=500、Z = 10 に設定します。
このセクションの結果
このセクションでは、新規レベルを作成し、Navigation Invoker を使用するようにナビゲーション システムを設定しました。
3 - エージェントを作成する
-
コンテンツ ドロワー で [New Folder (新規フォルダ)] を選択して新規フォルダを作成します。このフォルダに「NavigationSystem」という名前を付けます
-
コンテンツ ドロワー で、「ThirdPerson」>「Blueprints」 の順に移動し、[BP_ThirdPersonCharacter] ブループリントを選択します。これを「NavigationSystem」フォルダにドラッグし、 [Copy Here (ここにコピー)] オプションを選択します。
-
「NavigationSystem」フォルダに移動して、ブループリントの名前を「BP_NPC_Invoker」に変更します。ブループリントをダブルクリックして開き、イベント グラフ に移動します。入力ノードをすべて選択して削除します。
-
イベント グラフ を右クリックし、「Add Custom Event」を検索、選択します。イベントに「MoveNPC」という名前を付けます。
-
イベント グラフ を右クリックして、「Get Actor Location」を検索、選択します。
-
GetActorLocation ノードからドラッグし、「Get Random Reachable Point In Radius」を検索、選択します。[Radius (半径)] を 1000 に設定します。
-
GetRandomReachablePointInRadius ノードの Random Location ピンからドラッグして Promote to variable を選択します。
-
MoveNPC ノードを、先ほど作成した RandomLocation ノードに接続します。
-
イベント グラフ を右クリックし、「AI Move To」を検索、選択します。RandomLocation ノードを AI Move To ノードに接続します。
-
イベント グラフ を右クリックして、「Get reference to self」を検索、選択します。
-
Self ノードを AI Move To ノードの Pawn ピンに接続します。以下のように、 Random Location ノードの 黄色 のピンを AI Move To ノードの Destination ピンに接続します。
-
AI Move To ノードの On Success ピンをドラッグして、「Delay」を検索、選択します。以下のように、このノードの [Duration (期間)] を 4 に設定します。Delay ノードの Completed ピンをドラッグして、「MoveNPC」を検索、選択します。
-
Repeat the steps above to add these nodes to the On Fail pin of the AI Move To node.Delay ノードの Duration を 0.1 に設定します。
-
イベント グラフ を右クリックし、「Event Begin Play」を検索して選択します。Event Begin Play ノードからドラッグして、「MoveNPC」を検索、選択します。
-
[Components (コンポーネント)] タブで [+Add)] ドロップダウンをクリックし、「Navigation Invoker」を探して選択します。
-
Navigation Invoker コンポーネントが選択された状態で[Details (詳細)] パネルに移動し、[Navigation] セクションを見つけます。ここで、 [Tile Generation Radius (タイル生成半径)] (ナビゲーション メッシュ タイルを生成するために使用するアクタ周囲の半径) と [Tile Removal Radius (タイル削除半径)] (ナビゲーション メッシュ タイルの削除に使用するアクタからの半径) を変更できます。この例では、これらの値をそれぞれ 3000 と 5000 に設定します。
-
ブループリントを コンパイル して、保存 します。
-
BP_NPC_Invoker ブループリントをいくつかレベルにドラッグし、[Simulate (シミュレート)] をクリックして、各エージェントの周囲に生成されるナビゲーションを確認します。
ナビゲーションがない場合は、キーボードで P キー を押して、レベル内のナビゲーション メッシュを視覚化します。
このセクションの結果
このセクションでは、レベルをローミングし、Navigation Invoker コンポーネントを使用してそれ自体の周りにNavigation Meshを構築するエージェントを作成しました。