Choose your operating system:
Windows
macOS
Linux
概要
このドキュメントでは、ナビゲーション メッシュのさまざまな変更方法について説明する準備作業として、レベルと AI エージェントを作成する手順を説明します。
なお、完全なサンプル プロジェクト をダウンロードすることもできます。サンプル プロジェクトには、このガイドで取り上げるすべてのマテリアルが含まれています。
目的
シンプルなレベルを作成し、レベル内にナビメッシュ バウンズ ボリューム アクタを配置してナビゲーションを追加する。
ナビゲーション システムを使用してレベル内を歩き回るように ThirdPersonCharacter ブループリントを変更する。
1 - 必要な設定
メニューの [New Project Categories (新規プロジェクトカテゴリ)] セクションにある [Games (ゲーム)] を選択して [Next (次へ)] をクリックします。
[Third Person (サードパーソン)] テンプレートを選択し、[Next (次へ)] をクリックします。
[Blueprint (ブループリント)]、[No Starter Content (スターターコンテンツ無し)] オプションの順に選択して、[Create Project (プロジェクト作成)] をクリックします。
このセクションの結果
新規のサードパーソン プロジェクトを作成し、ナビゲーション メッシュが配置された基本的なレベルを構築する準備が出来ました。
2 - テスト レベルを作成する
メニューバーで [File (ファイル)] > [New Level (新規レベル)] の順にクリックします。
[Default (デフォルト)] レベルを選択します。
[World Outliner (アウトライナ)] で [Floor] スタティック メッシュ アクタを選択し、 [Details (詳細)] パネルで [Scale (拡大・縮小)] を X = 10、Y = 10、Z = 1 に設定します。
コンテンツ ブラウザ で 「Geometry」>「Meshes」 の順に移動し、[TemplateFloor] スタティック メッシュをレベルにドラッグします。
[Place Actors (アクタを配置)] パネルに移動し、「Nav Mesh Bounds Volume」を検索します。これをレベルにドラッグして、Floor メッシュ上に配置します。
[Nav Mesh Bounds Volume] を選択した状態で [Details] パネルに移動し [Scale] を X = 20、Y = 20、Z = 5 に設定して、床領域全体を覆うようにします。デフォルトで、Unreal Engine によってナビゲーション バウンズ内にナビゲーションが自動生成されます。ナビメッシュ アクタ RecastNavMesh-Default もレベルに追加されます。P キー を押して、レベル内のナビゲーション メッシュを視覚化します。
ナビゲーションが生成されない場合は、[Project Settings] > [Navigation System (ナビゲーション システム)] の順に移動して [Auto Create Navigation Data (ナビゲーション データの自動作成)] チェックボックスをオンにします。
[Place Actors] パネルに移動し、 [Basic (基本)] カテゴリで [Cube (キューブ)] スタティック メッシュ アクタをレベルにドラッグします。
その キューブ を選択した状態で [Details] パネルに移動して、 [Scale] を X = 1、Y = 1、Z = 5 に設定します。
レベルにさらに 3 つ キューブ を追加して、先ほどのキューブと同じサイズに変更します。それらのキューブを、以下のように床に配置して、4 つの柱を作成します。
次に、中央に階段とプラットフォームを追加します。コンテンツ ブラウザ で 「ThirdPerson」 > 「Meshes」 の順に移動し、 [Linear_Stair_StaticMesh] をレベルにドラッグします。
階段を選択した状態で [Details] パネルに移動して、 [Scale] を X = 1.5、Y = 1、Z = 1.3 に設定します。
階段を選択した状態で、 Alt キーを押しながらメッシュをドラッグして複製します。
[Place Actors] パネルに移動し、 [Basic (基本)] カテゴリで [Cube (キューブ)] スタティック メッシュ アクタをレベルにドラッグします。[Details] パネルに移動して [Scale] を X = 14、Y = 4、Z = 0.1 に設定します。以下のように、階段の端にアクタを配置してプラットフォームを作成します。
[Place Actors] パネルに移動し、 [Basic] カテゴリで [Sphere (スフィア)] スタティック メッシュアクタをレベルにドラッグします。
この スフィア を選択した状態で [Details] パネルに移動し、 [Collision (コリジョン)] セクションで [Collision Presets (コリジョン プリセット)] を [No Collision (コリジョンなし)] に設定します。
最後に、スフィアを複製して、以下のようにレベル中に配置します。
このセクションの結果
このセクションでは、単純なレベルを作成してナビメッシュ バウンズ ボリュームを追加しました。また、エージェントのターゲット アクタの役割を果たす 5 つのスフィアを追加しました。
3 - エージェントを作成する
このセクションでは、一連のターゲット アクタの間を移動する AI エージェントを作成します。
コンテンツ ブラウザ で右クリックし、 [New Folder (新規フォルダ)] を選択して新しいフォルダを作成します。このフォルダに「NavigationSystem」という名前を付けます
コンテンツ ブラウザ で、 「ThirdPersonBP」>「Blueprints」 の順に移動し、 [ThirdPersonCharacter] ブループリントを選択します。これを「 NavigationSystem 」フォルダにドラッグし、 [Copy Here (ここにコピー)] オプションを選択します。
「NavigationSystem」フォルダに移動して、ブループリントの名前を「BP_NPC_ModNavMesh」に変更します。ブループリントをダブルクリックしてブループリント エディタで開き、 イベント グラフ に移動します。すべての入力ノードを選択し、削除します。
イベント グラフ を右クリックし、「Add Custom Event」を検索、選択します。イベントに「MoveNPC」という名前を付けます。
[My Blueprint (マイ ブループリント)] パネルに移動し [Variables (変数)] の隣の 追加 (+) ボタン をクリックして新しい変数を作成します。変数の名前を「TargetList」にします。
[Details] パネルに移動し、 [Variable Type (変数の型)] の隣のドロップダウンをクリックします。「Actor」を検索して、[Object Reference (オブジェクト参照)] を選択します。
以下のように、選択した Actor の隣にある 青色の球体 アイコンをクリックして、 [Array (配列)] オプションをクリックします。[Instance Editable (インスタンス編集可能)] チェックボックスをクリックして有効にします。
TargetList 変数を イベント グラフ にドラッグして [Get TargetList (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」を検索、選択します。Random Location ノードの 黄色 のピンを 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] を見付けて 追加 (+) ボタンをクリックし、新しいターゲット アクタを追加します。
ドロップダウンをクリックして、以前作成した スフィア アクタを検索、選択します。
上記の手順を繰り返して、残りの 4 つの スフィア アクタを追加します。
[Simulate (シミュレート)] をクリックして、エージェントがレベル内のゴール間を歩き回るのを確認します。
このセクションの結果
このセクションでは、一連のターゲット アクタの間を歩き回るエージェントを作成しました。これで、ナビゲーション システムの変更 についての学習に進むことができます。