概要
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を構築するエージェントを作成しました。