概要
このドキュメントでは、ナビゲーション メッシュのさまざまな変更方法について説明する準備作業として、レベルと 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 をクリックしてエージェントがレベルの目標間を移動するのを確認します。
このセクションの結果
このセクションでは、ターゲット アクタのリストの間を移動するエージェントを作成しました。これで、ナビゲーション システムの変更 についての学習に進むことができます。