概要
このドキュメントでは、ナビゲーション メッシュのさまざまな変更方法について説明する準備作業として、レベルと AI エージェントを作成する手順を説明します。
なお、完全なサンプル プロジェクト をダウンロードすることもできます。サンプル プロジェクトには、このガイドで取り上げるすべてのマテリアルが含まれています。
目的
シンプルなレベルを作成し、レベル内にナビメッシュ バウンズ ボリューム アクタを配置してナビゲーションを追加する。
ナビゲーション システムを使用してレベル内を歩き回るように ThirdPersonCharacter ブループリントを変更する。
1 - 必要な設定
メニューの [New Project Categories (新規プロジェクトカテゴリ)] セクションで [Games (ゲーム)] > [Third Person (サードパーソン)] の順に選択します。
[Blueprint (ブループリント)] と [No Starter Content (スターター コンテンツなし)] オプションを選択し、[Create] をクリックします。
このセクションの結果
新しいサードパーソンプロジェクトが作成され、ナビゲーション メッシュを使用して基本的なレベルを構築する準備が整いました。
2 - テスト レベルを作成する
メニューバーで [File] > [New File...] の順にクリックします。
[Basic] レベルを選択して [Create] をクリックします。
アウトライナ で [Floor] スタティック メッシュ アクタを選択し、[Details (詳細)] パネルで [Scale (拡大・縮小)] を X = 10、Y = 10、Z = 1 に設定します。
コンテンツ ブラウザ で 「LevelPrototyping」>「Meshes」 の順に移動し、[TemplateFloor] スタティック メッシュをレベルにドラッグします。
[Place Actors (アクタを配置)] パネルに移動し、「Nav Mesh Bounds Volume」を検索します。これをレベルにドラッグして、Floor メッシュ上に配置します。
NavMeshBoundsVolume を選択して、フロア全体をカバーするために [Details] パネルで [Scale] を X = 20, Y = 20, Z = 5 に設定します。Unreal Engine はデフォルトでナビゲーションバウンド内に自動的にナビゲーションを生成します。ナビメッシュ アクタ RecastNavMesh-Default もレベルに追加する必要があります。P キーを押して、レベルでナビゲーション メッシュを視覚化します。
ナビゲーションが生成されない場合は、[Project Settings] > [Navigation System] を選択して [Auto Create Navigation Data] チェックボックスを有効にします。
[Place Actors] パネルに移動し、 [Shapes] カテゴリで [Cube (キューブ)] スタティック メッシュ アクタをレベルにドラッグします。
その キューブ を選択した状態で [Details] パネルに移動して、 [Scale] を X = 1、Y = 1、Z = 5 に設定します。
Cubes をあと 3 つレベルにドラッグして、上のようにスケーリングします。それらを床付近に配置して、以下のように柱を 4 本作成します。
次に真ん中に階段とプラットフォームを追加します。コンテンツ ドロワー で 「サードパーソン」>「メッシュ」 の順に移動し、Linear_Stair_StaticMesh をレベルにドラッグします。
階段を選択した状態で [Details] パネルに移動して、 [Scale] を X = 1.5、Y = 1、Z = 1.3 に設定します。
階段を選択して、Alt キーを長押ししてメッシュをドラッグして複製します。
[Place Actors] パネルに移動し、 [Shapes] カテゴリで [Cube (キューブ)] スタティック メッシュ アクタをレベルにドラッグします。[Details] パネルで [Scale] を [X = 14, Y = 4, Z = 0.1] に設定します。以下のように、アクタを階段の端に配置してプラットフォームを作成します。
[Place Actors] パネルに移動し、 [Basic (基本)] カテゴリで [Sphere (球)] スタティック メッシュ アクタをレベルにドラッグします。
球体 を選択した状態で[Details (詳細)] パネルに行き、[Collision] セクションで [Collision Presets] を [No Collision] に設定します。
最後に、球体を複製して、以下のようにそれらをレベルの周りに配置します。
このセクションの結果
このセクションでは、シンプルなレベルを作成してナビメッシュ バウンズボリュームを追加します。さらに、エージェントのターゲット アクタの役割を果たす 5 つの球を追加します。
3 - エージェントを作成する
このセクションでは、ターゲット アクタのリストの間を移動する AI Agent を作成します。
コンテンツ ドロワー で [New Folder (新規フォルダ)] を選択して新規フォルダを作成します。このフォルダに「NavigationSystem」という名前を付けます
コンテンツ ドロワー で、「ThirdPerson」>「Blueprints」 の順に移動し、[BP_ThirdPersonCharacter] ブループリントを選択します。これを「NavigationSystem」フォルダにドラッグし、 [Copy Here (ここにコピー)] オプションを選択します。
「NavigationSystem」フォルダに移動して、ブループリントの名前を「BP_NPC_ModNavMesh」に変更します。ブループリントをダブルクリックしてブループリント エディタ内で開き、イベント グラフ に移動します。入力ノードをすべて選択して削除します。
イベント グラフ を右クリックし、「Add Custom Event」を検索、選択します。イベントに「MoveNPC」という名前を付けます。
[My Blueprint (マイ ブループリント)] パネルに移動し [Variables (変数)] の隣の 追加 (+) ボタン をクリックして新しい変数を作成します。変数の名前を「TargetList」にします。
[Details] パネルを開き、Variable Type の横にあるドロップダウンをクリックします。「Actor」を検索して、[Object Reference (オブジェクト参照)] を選択します。
アクタ選択の横にある 青い球 のアイコンをクリックして以下のように [Array] オプションをクリックします。[Instance Editable] チェックボックスをクリックして有効にします。
TargetList 変数を イベント グラフ にドラッグし、オプション Get TargetList を選択します。
TargetList ノードからドラッグして、「Last Index」を検索、選択します。
TargetList ノードからドラッグし、「Get (a copy)」を検索して選択します。
Get ノードの 緑色 のピンからドラッグし、「Random Integer in Range」を検索、選択します。以下のように、Last Index ノードの 緑の ピンを Random Integer in Range ノードの Max ピンに接続します。
Get ノードからドラッグして、Promote to variable を検索して選択します。変数 CurrentTarget に名前をつけて、MoveNPC ノードに接続します。
CurrentTarget ノードからドラッグして、「Is Valid」を検索、選択します。IsValid マクロを Set CurrentTarget ノードに接続します。
CurrentTarget 変数を イベント グラフ にドラッグし、Get Current Target を選択します。CurrentTarget ノードからドラッグして、「Get Actor Location」を検索、選択します。
GetActorLocation ノードの Return Value からドラッグし、「Get Random Reachable Point In Radius」を検索、選択します。Radius の値を 100 を設定します。
GetRandomReachablePointInRadius ノードの Random Location ピンからドラッグして Promote to variable を選択します。変数の名前を「RandomLocation」にします。以下のように、RandomLocation ノードを IsValid ノードに接続します。
RandomLocation ノードからドラッグして、「AI MoveTo」を検索、選択します。
AI MoveTo ノードの Pawn ピンをドラッグして、「Get a reference to self」を検索、選択します。RandomLocation ノードの 黄色 ピン を AI MoveTo ノードの Destination ピンに接続します。最後に、AI MoveTo ノードの Acceptance Radius を以下のように 50 に設定します。
AI Move To ノードの On Success ピンをドラッグして、「Delay」を検索、選択します。以下のように、このノードの [Duration (期間)] を 4 に設定します。Delay ノードの Completed ピンをドラッグして、「MoveNPC」を検索、選択します。
上記の手順を繰り返して、AI Move To ノードの On Fail ピンにノードを追加します。Delay ノードの Duration を 0.1 に設定します。
イベント グラフ を右クリックし、「Event Begin Play」を検索して選択します。Event Begin Play ノードからドラッグして、「MoveNPC」を検索、選択します。
ブループリントを コンパイル して、保存 します。
BP_NPC_ModNavMesh ブループリントをレベルにドラッグして、 [Details] パネルで [Target List] を見つけて、Add (+) ボタン をクリックして新しいターゲット アクタを追加します。
ドロップダウンをクリックして、すでに作成した Sphere アクタを検索して選択します。
上記の手順を繰り返して残りの 4 つの Sphere アクタを追加します。
Simulate をクリックしてエージェントがレベルの目標間を移動するのを確認します。
このセクションの結果
このセクションでは、ターゲット アクタのリストの間を移動するエージェントを作成しました。これで、ナビゲーション システムの変更 についての学習に進むことができます。