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

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

Windows
MacOS
Linux

概要

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

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

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

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

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

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

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

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

手法

説明

制限事項

対障害物相対速度

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

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

  • Detour 群衆マネージャーと比べて設定可能なオプションが少ない。

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

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

Detour 群衆マネージャー

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

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

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

目標

このガイドでは、相互にやり取りする複数のエージェントの動作を比較して、対障害物相対速度回避手法と Detour 群衆回避手法を使用する方法を説明します。

目的

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

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

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

1 - 必要な設定

  1. メニューの [New Project Categories (新規プロジェクトカテゴリ)] セクションにある [Games (ゲーム)] を選択して [Next (次へ)] をクリックします。

    Select the Games category and click Next

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

    Select the Third Person template and click Next

  3. [Blueprint (ブループリント)][No Starter Content (スターターコンテンツ無し)] オプションの順に選択して、[Create Project (プロジェクト作成)] をクリックします。

    Select Blueprint and No Starter Content and click Create Project

このセクションの結果

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

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

  1. メニューバーで [File (ファイル)] > [New Level (新規レベル)] の順にクリックします。

    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 (アクタを配置)] パネルに移動し、「Nav Mesh Bounds Volume」を検索します。これをレベルにドラッグして、Floor メッシュ上に配置します。Nav Mesh Bounds Volume の [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 (アクタを配置)] パネルに移動し、「Nav Mesh Bounds Volume」を検索します。

    これをレベルにドラッグして、Floor メッシュ上に配置します。Nav Mesh Bounds Volume の [Scale] を X = 7、Y=10、Z = 1 にします。

このセクションの結果

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

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

  1. コンテンツ ブラウザ で右クリックし、 [New Folder (新規フォルダ)] を選択して新しいフォルダを作成します。このフォルダに「 NavigationSystem 」という名前を付けます

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

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

  3. NavigationSystem」フォルダに移動して、ブループリントの名前を「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

  11. イベント グラフ を右クリックし、「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

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

    This is the final Blueprint setup

  13. 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

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

    Duplicate the BP_NPC_NoAvoidance Blueprint

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

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

    Click Simulate and watch as the Agents navigate toward their goals

このセクションの結果

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

4 - エージェントに対障害物相対速度回避を追加する

  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. ブループリントコンパイル して 保存 します。これで、エージェントで対障害物相対速度回避が有効になりました。

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

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

このセクションの結果

このセクションでは、エージェントに対障害物相対速度回避を追加する方法を学習しました。

5 - エージェントに 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. ブループリントを コンパイル して 保存 します。エージェントで Detour 群衆回避が有効になりました。

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

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

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

    Click Project Settings

  7. このセクションでは、Detour 群衆マネージャー システムのいくつかの設定 (システムで使用する [Max Agents (最大エージェント)]、回避計算に使用する [Max Agent Radius (最大エージェント半径)] など) を調整できます。

    In this section you can adjust several settings for the Detour Crowd Manager system

このセクションの結果

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

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