ナビゲーション システムで回避を使用する

このガイドでは、ナビゲーション システムで回避を使用する方法を説明します。

概要

Unreal Engineナビゲーション システム では、エージェントがパス検索に ナビゲーション メッシュ を使用してレベルをトラバースできます。

動かないオブジェクトを回避するパスの決定はパス検索でできますが、動き回る障害物に対処するには回避アルゴリズムの方が適しています。エージェントが動的な障害物を避けながら移動するための回避手法は、Reciprocal Velocity Obstacles (RVO)Detour Crowd Manager の 2 つがあります。

RVO システムは、付近のエージェントとの衝突を回避するために各エージェントの速度ベクターを計算します。このシステムでは、付近のエージェントを調査して、それらのエージェントが計算の各タイム ステップにおいて一定速度で移動するものと想定します。選択された最適な速度ベクターは、エージェントにとってターゲットの方向の好ましい速度に最も一致するものです。

Unreal Engine の RVO 実装には、フレーム レート依存関係を削減する最適化が含まれています。また、定数パス再計算を回避するための改善と、潜在的な衝突の解決に役立つ優先順位システムも含まれています。RVO は回避にナビゲーション メッシュを使用しないので、キャラクターのナビゲーション システムとは別に使用できます。このシステムは Character クラスの Character Movement コンポーネントに含まれています。

Detour Crowd Manager システムは、アダプティブ RVO サンプリング計算を使用して、エージェント間の回避を処理します。回避処理は、エージェントの方向に対するバイアスを持った、粗くサンプリングされた速度を計算して行います。これにより、従来の RVO 手法よりも回避の質が大きく向上します。また、このシステムでは、可視性とトポロジ パス コリダー最適化を使用して、衝突回避をさらに改善しています。

Detour Crowd Manager システムは、サンプリング パターン、エージェントの最大数、エージェントの半径を指定できるオプションがあり、詳細に設定できます。このシステムは DetourCrowd AI Controller クラスに含まれており、任意の Pawn クラスで使用できます。

どちらのシステムも独立して機能します。プロジェクトでは、どちらか一方だけを使用することをお勧めします。

回避手法のおおまかな比較

手法

説明

制限事項

RVO

  • エージェントが速度ベクターを使用して指定した半径内の障害物を回避する。

  • Character クラスの Character Movement コンポーネントに含まれる。

  • Detour Crowd Manager と比べて設定可能なオプションが少ない。

  • Character クラスでしか使用できない。

  • 回避にナビゲーション メッシュを使用しないので、エージェントが「境界の外」に出るおそれがある。

Detour Crowd Manager

  • エージェントがパス最適化と速度ベクターを使用して指定した半径内の障害物を回避する。

  • DetourCrowd AI Controller クラスに含まれる。| エージェントの最大数はプロジェクト設定の定義で固定されている。

  • エージェントの最大数はプロジェクト設定の定義で固定されている。

目標

このガイドでは、相互にやり取りする複数のエージェントの動作を比較して、RVO と Detour Crowd Manager による回避方法を使用する方法を説明します。

目的

  • ターゲットに向かって移動するように ThirdPersonCharacter ブループリントを変更する。

  • RVO による回避を使用するように Agent ブループリントを変更する。

  • Crowd Detour 回避を使用するように Agent Blueprint を変更する。

1 - 必要な設定

  1. メニューの [New Project Categories (新規プロジェクトカテゴリ)] セクションにある [Games (ゲーム)] > [Third Person (サードパーソン)]** テンプレートを選択します。

    Select the Games category and click Next

  2. [Third Person (サードパーソン)] テンプレートを選択し、[Next (次へ)] をクリックします。

    Select Blueprint and No Starter Content and click Create Project

このセクションの結果

新規サード パーソン プロジェクトが作成され、Unreal Engine で使用可能な回避手法を学習する準備が整いました。

2 - テスト レベルを作成する

  1. メニューバーで [File] > [New File...] の順にクリックします。

    Click New Level

  2. [Default] レベルを選択します。

    Select the Default Level

  3. アウトライナ[Floor] スタティック メッシュ アクタを選択し、[Details (詳細)] パネルで [Scale (拡大・縮小)] を X = 10、Y = 10、Z = 1 に設定します。

    Select the Floor Static Mesh Actor in the World Outliner

    Set the Scale to X = 10, Y = 10, Z = 1

  4. [Place Actors (アクタを配置)] パネルに移動し、「NavMeshBoundsVolume」を検索します。これをレベルにドラッグして、Floor メッシュ上に配置します。NavMeshBoundsVolume の [Scale] を X = 7、Y=10、Z = 1 にします。

    Drag a Nav Mesh Bounds Volume Actor to the Level

    Scale the Nav Mesh Bounds Volume to X = 7, Y=10, Z = 1

  5. [Place Actors (アクタを配置)] パネルに移動し、[Shapes] カテゴリから Sphere アクタをレベルにドラッグします。

    Drag two Sphere Actors into the Level

このセクションの結果

このセクションでは、新しいレベルを作成し、ナビゲーション メッシュを追加しました。また、エージェントのターゲットの役割を果たす 2 つのスフィア アクタを追加しました。

3 - エージェントを作成する

  1. コンテンツ ドロワー[New Folder (新規フォルダ)] を選択して新規フォルダを作成します。このフォルダに「Avoidance」という名前を付けます

  2. コンテンツ ドロワー で、「TThirdPerson」>「Blueprints」 の順に移動し、[BP_ThirdPersonCharacter] ブループリントを選択します。これを「Avoidance」フォルダにドラッグし、 [Copy Here (ここにコピー)] オプションを選択します。

    Drag the Third Person Character Blueprint to the Avoidance folder and select Copy Here

  3. Avoidance」フォルダに移動して、ブループリントの名前を「BP_NPC_NoAvoidance」に変更します。ブループリントをダブルクリックして開き、イベント グラフ に移動します。入力ノードをすべて選択して削除します。

  4. イベント グラフ を右クリックし、「Add Custom Event」を検索、選択します。イベントに「MoveNPC」という名前を付けます。

    Right-click the Event Graph, then search for and select Add Custom Event. Name the event Move NPC

  5. [My Blueprint (マイ ブループリント)] パネルに移動し [Variables (変数)] の隣の 追加 (+) ボタン をクリックして新しい変数を作成します。変数に「Target」という名前を付けます。

    Click the Add button next to Variables to create a new variable. Name the variable Target

  6. [Details] パネルに移動し、[Variable Type (変数の型)] ドロップダウンをクリックします。「Actor」を検索して、[Object Reference (オブジェクト参照)] を選択します。[Instance Editable (インスタンス編集可能)] チェックボックスをオンにします。

    Set the Variable Type to Actor Object Reference

    Enable the Instance Editable checkbox

  7. Target 変数をイベント グラフ にドラッグし、[Get Target (Target を取得)] を選択します。以下のように、Target ノードからドラッグして「Is Valid**」マクロを検索、選択します。

    Drag from the Target node, then search for and select the Is Valid macro

  8. イベント グラフ を右クリックし、「Get reference to self」を検索して選択します。

    Right-click the Event Graph, then search for and select Get reference to self

  9. イベント グラフ を右クリックし、「AI Move To」を検索、選択します。

    Right-click the Event Graph, then search for and select AI Move To

  10. Is Valid ノードの Is Valid ピンを AIMoveTo ノードに接続します。Self ノードを AIMoveTo ノードの Pawn ピンに接続します。Target 変数をドラッグして、AIMoveTo ノードの Target Actor ピンに接続します。

    Connect the Is Valid node to the AI Move To node. Connect the Target variable to the AI Move To node

    1. イベント グラフ を右クリックし、「Event Begin Play」を検索して選択します。Event Begin Play ノードからドラッグして、「MoveNPC」を検索、選択します。

    Right click the Event Graph, then search for and select Event Begin Play

    Drag from the Event Begin Play node, then search for and select Move NPC

  11. ブループリントを コンパイル して、保存 します。完成したブループリントは、次の画像のようになります。

    This is the final Blueprint setup

  12. BP_NPC_NoAvoidance ブループリントをレベルにドラッグし、[Details] パネルで、[Target] の隣のドロップダウンをクリックし、エージェントの前にある Sphere アクタを検索して選択します。

    Drag the BP_NPC_NoAvoidance Blueprint into your Level

    Click the dropdown next to Target, then search for and select the Sphere Actor

  13. 以下のように BP_NPC_NoAvoidance ブループリントを複製します。

    Duplicate the BP_NPC_NoAvoidance Blueprint

  14. 最後の 2 つの手順を繰り返し、レベルの反対側にエージェントのグループをもう 1 つ作成します。それらのエージェントの前に、ターゲットとして Sphere を配置します。

  15. [Simulate (シミュレート)] をクリックして、エージェントがゴールに向かって移動するのを観察します。回避を設定しないとレベルの中央でどのように衝突が発生するのかに注目します。

    Click Simulate and watch as the Agents navigate toward their goals

このセクションの結果

このセクションでは、回避を使用せずにゴールに向かって移動するエージェントを作成しました。

4 - エージェントにRVO回避を追加する

  1. コンテンツ ドロワー で、[BP_NPC_NoAvoidance] ブループリントを右クリックして、[Duplicate (複製)] をクリックします。新しいブループリントに「BP_NPC_RVO」という名前を付けます。

    Duplicate the BP_NPC_NoAvoidance Blueprint and name it BP_NPC_RVO

  2. [BP_NPC_RVO] ブループリントをダブルクリックして、ブループリント エディタで開きます。[Character Movement] コンポーネントを選択し、[Details] パネルで [Character Movement: Avoidance (キャラクタームーブメント:回避)] セクションに移動します。

    Select the Character Movement component

    Go to the Avoidance section

  3. [Use RVOAvoidance (RVO 回避を使用)] チェックボックスをオンにして、[Avoidance Consideration Radius (回避考慮半径)]100 に設定します。

    Enable the Use RVOAvoidance checkbox and set Avoidance Consideration Radius to 100

  4. ブループリントコンパイル して 保存 します。これで、エージェントで RVO 回避が有効になりました。

  5. いくつかの [BP_NPC_RVO] ブループリントをレベルにドラッグし、以前と同じ設定に従います。[Simulate] をクリックして結果を確認します。

    Drag several BP_NPC_RVO Blueprints to your Level and follow the same configuration as before

このセクションの結果

このセクションでは、エージェントに RVO 回避を追加する方法を学習しました。

5 - エージェントに Crowd Detour 回避を追加する

  1. コンテンツ ドロワー で、[BP_NPC_NoAvoidance] ブループリントを右クリックして、[Duplicate (複製)] をクリックします。新しいブループリントに「BP_NPC_DetourCrowd」と名前を付けます。

    Duplicate the BP_NPC_NoAvoidance Blueprint and name it BP_NPC_DetourCrowd

  2. [BP_NPC_DetourCrowd] ブループリントをダブルクリックして開きます。[Details] パネルに移動して「AI Controller」を検索します。

    Go to the Details panel and search for AI Controller

  3. [AI Controller Class (AI コントローラー クラス)] の隣のドロップダウンをクリックして、[DetourCrowdAIController] を選択します。

    Click the dropdown next to AI Controller Class and select Detour Crowd AI Controller

  4. ブループリントを コンパイル して 保存 します。エージェントで Crowd Detour 回避が有効になりました。

  5. いくつかの BP_NPC_DetourCrowd ブループリントをレベルにドラッグし、以前と同じ設定に従います。[Simulate] をクリックして結果を確認します。

    Drag several BP_NPC_DetourCrowd Blueprints to your Level and follow the same configuration as before

  6. Detour Crowd Manager 設定の調整は、[Settings (設定)] > [Project Settings (プロジェクト設定)][Crowd Manager] セクションに移動して行うことができます。

    Click Project Settings

  7. このセクションでは、Detour Crowd Manager システムのいくつかの設定 (システムで使用する [Max Agents (最大エージェント)]、回避計算に使用する [Max Agent Radius (最大エージェント半径)] など) を調整できます。 In this section you can adjust several settings for the Detour Crowd Manager system

このセクションの結果

このセクションでは、エージェントに Crowd Detour 回避を追加する方法を学習しました。

タグ
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル