Language:
Page Info
Skill Level:
Engine Version:

Environment Query System ユーザーガイド

Environment Query System を有効にする

  1. Edit メニュー -> Editor Preferences

  2. [Experimental]

  3. AI までスクロールします。

  4. Environment Query System を有効にします。

Environment Query の構成要素

Environment Query は実際には多くの異なる要素で構成されています。ビヘイビア ツリーから Environment Query を呼び出し、その後その Environment Query がジェネレータを使用してコンテキストを参照し、テストを使用してビヘイビアツリーでウェイトが最も高い結果が出るようにします。

ビヘイビアツリー

ビヘイビアツリーで Environment Query を使用するには、 EQS Query Task ノードが必要です。

runEQS.png

ビヘイビアツリーで EQS Query Task ノードを選択すると、 Query Template プロパティ (Environment Query アセット) 、そして (Environment Query アセットに渡される指定値である) Query Params プロパティ、および最もウェイトの高い結果を返すブラックボード キーの設定が可能になります (オブジェクトまたはベクター)。

runEQS_details.png

使用方法については ビヘイビアツリー ドキュメントをご覧ください。

Environment Query

Environment Query アセットとは、Run EQS Query node を使用してビヘイビアツリーに呼び出して、アクタや位置を色々テストして「一番良いもの」を決めるためのものです。どれが本当に「一番良い」のかは、Environment Query 内でのテストの構築のされ方によって大きく変わります。

環境クエリは、ブループリントと C++ で作成することができます。

ジェネレータ

ジェネレータ は、いわゆる アイテム と呼ばれる位置またはアクタを生成し、それが実際にテストされウェイト付けされて、ウェイトの一番高い位置またはアクタがビヘイビアツリーに返されます。

ジェネレータ は、ブループリントと C++ で作成することができます。

コンテキスト

コンテキスト とは、様々なテストとジェネレータの基準となる枠組みです。The Querier のように単純の時もあれば、 All Actors of a Type のように複雑な場合もあります。

Simple Grid Generator のようなジェネレータが複数の位置あるいはアクタを返すコンテキストを使用できる点は注目すべきです。これにより、定義したサイズと密度で Simple Grid が各コンテキストの位置に作成されます。

コンテキストは、ブループリントと C++ で作成することができます。

テスト

テストとは、Environment Query がどのように「一番良いアイテム」を決めるかです。デフォルト テストには、別の位置へアイテムをトレースできるのか、または、アイテムとコンテキスト間の距離は指定範囲内になっているか、などの使用事例がかなり入っています。

現在、 テスト は C++ で作成しなければなりません。ブループリントには実装できるバージョンはありません。

クエリの作成

newQuery.png

  1. コンテンツ ブラウザで、 [Create (新規作成)] ボタンを 左クリック します。

  2. [Miscellaneous (その他)] -> [Environment Query] を選択します。

ブループリント コンテキストの作成

  1. コンテンツ ブラウザで、 [Create (新規作成)] ボタンを 左クリック します。

  2. [Blueprint] を選択します。

  3. [All Classes] を展開します。

  4. EnvQueryContext を検索します。

  5. [EnvQueryContext_BlueprintBase] を選択します。

ブループリント ジェネレータの作成

  1. コンテンツ ブラウザで、 [Create (新規作成)] ボタンを 左クリック します。

  2. [Blueprint] を選択します。

  3. [All Classes] を展開します。

  4. EnvQueryGenerator を検索します。

  5. [EnvQueryGenerator_BlueprintBase] を選択します。

Root を Generator へ接続する

connectRootToGen.png

Root ノードの下の黒い部分を 左クリック して Generator ノードの上の部分の暗い部分へ ドラッグ して接続します。

または、左クリック してグラフエリアへ ドラッグ すると、Generator ノードを新規作成するオプションが現れます。

Root へ複数の Generator ノードを接続することができますが、クエリ内で使用するのは、一番左の有効な Generator のみです。

ビヘイビアツリーへクエリを追加する

ビヘイビアツリーで Environment Query を使用するには、 EQS Query Task ノードが必要です。

runEQS.png

  1. ビヘイビアツリーのグラフ エリア内を 右クリック します。

  2. Task -> Run EQSQuery ノードを作成します。

  3. 新規作成した Run EQSQuery ノードを選択し、Query Template プロパティを Environment Query アセットに変更します (あるいは、プルダウンから新規に作成します)。

  4. オプションで、Environment Query が検索する可能性のある Query Params を設定します。

  5. 最後に、Environment Query で設定されるブラックボードのキーを設定します。ここでは Object と Vector のブラックボード キーのみ使用可能です。

クエリの編集

ジェネレータの追加

  1. クエリのグラフ エリアを右クリックして、ジェネレータを選択します。

addGenToQuery.png

テストの追加

  1. ジェネレータを右クリックして、追加するテストを選択します。

addTest.png

テストの修正

  1. ジェネレータでテストを選択し、[Details (詳細)] パネルで修正します。

editTest.png

個々のテストの使用方法に関しては、 Environmental Query System Node Reference を参照してください。

クエリ結果のプレビュー

クエリ結果のプレビューについては、 Environmental Query System Test Pawn を参照してください。

testingPawnBanner.png

コンテキストの編集

新規作成された EnvQueryContext ブループリントには、4 つの機能が実装されています。

  • Provide Single Location

  • Provide Single Actor

  • Provide Locations Set

  • Provide Actors Set

これらの 1 つを実行すると、クエリ内のテストで使えるようにコンテキストをカスタム化して作成できるようになります。実行したい関数 (複数可) を右クリックして、 [Implement Function (関数を実装)] を選択してください。

implementableFunctions.png

Provide Single Location

単一の位置 (ベクター) を返します。この位置は自由な方法で生成することができます。例えばこの関数は、Querier から 1500 cm 以内で検出された (ポーン、ビークルなど、 DesiredObjectType 配列で検出されたタイプの 1 つである) ランダムなアクタのトレース ヒット位置を返します

Provide Single Actor

単一のアクタを返します。このアクタは自由な方法で検出することができます。このサンプルでは、関数は Player 0 で制御された (所有された) アクタを返します。

Provide Locations Set

位置 (ベクター) の配列を返します。これらの位置の生成方法は自由です。サンプルのグラフでは、環境上でのヒットを返しながら、半径が 1500 単位の円上で均等に間隔をあけて 16 の位置からトレースしています。

Provide Actors Set

アクタの配列を返します。これらのアクタの検索方法は自由です。この関数は、例えば変数 Team Number1 に設定させる MyCharacter アクタの配列を返します。

ジェネレータの編集

Event Do Item Generation

implementDoItem.png

ジェネレータの主要関数です。この関数を実行すると、Environment Query から渡されたコンテキスト位置である位置の配列を受け取ります。これはコンテキストに応じて Querier の位置を持つ 1 つのエントリの配列であったり、またはレベル内それぞれのヘルス パックの位置であったりします。

Add Generated Actor

AddGenActor.png

関数は値を 1 つしか返せないので、 "Do Item Generation" 関数は実際には Environment Query に戻すことができる配列を 2 つ持ちます。このノードは Actor return array にアクタを追加し、位置の値も返すために Add Generated Vector ノードと一緒に使うことができます。

ジェネレータは、EnvQuery ノードから何をブラックボード キーに設定したかに基いて、実際にビヘイビアツリーに何を戻すかを決定します。

Add Generated Vector

AddGenVec.png

関数は値を 1 つしか返せないので、 "Do Item Generation" 関数は実際には Environment Query に戻すことができる配列を 2 つ持ちます。このノードはベクターを返す配列にベクターを追加します。また、Add Generated Actor ノードと一緒に使って Actor 値を返すこともできます。

ジェネレータは、EnvQuery ノードから何をブラックボード キーに設定したかに基いて、実際にビヘイビアツリーに何を戻すかを決定します。

Example Generator

Querier に向かって Rad の半径を持つ円のエッジからトレースします。そして、Number of Spokes 値 (つまり 360/Number of Spokes) に基いた度数でトレースの間隔を空けます。トレースの位置は、基本的には呼び出し元が分からないサーフェスを検索し、その環境にヒットした場合のみ格納されます。

このようになります。

customGenOutput.png

このサンプルで唯一すべきことは、円の生成場所を変更するために Do Item Generation から渡された Context Locations を使用することです。単に画像サイズの制約上行いませんでした。