- 追加された行はこの色です。
- 削除された行はこの色です。
#contets
#contents
----
UEnvQueryGenerator_SimpleGrid
っぽい
UE 4.14.0ではEQSのテストはBlueprintで作成出来ない。
C++が必要になるのでその手順メモ。
* 参考 [#xd5b71b4]
エンジンのソースコードの下記辺りに既存のテストclassが有る
Engine\Source\Runtime\AIModule\Classes\EnvironmentQuery\Tests\
* 作り方 [#z058c67d]
+ C++クラスを作成する
&ref(eqs_create_test01.png,,70%);
+ 右上の「Show All Classes」にチェック、親クラスを「EnvQueryTest」を指定する。
&ref(eqs_create_test02.png,,70%);
+ そのまま作成を進めてC++ファイルを追加する。Visual Studioで開かれる。
+ ヘッダーは下記のように。
UCLASS()
class UMyEnvQueryTest : public UEnvQueryTest
{
GENERATED_UCLASS_BODY()
// テストを行う
virtual void RunTest(FEnvQueryInstance& QueryInstance) const override;
virtual FText GetDescriptionTitle() const override;
virtual FText GetDescriptionDetails() const override;
};
+ ソースコードもいい感じに
#include "EnvironmentQuery/Items/EnvQueryItemType_VectorBase.h"
UMyEnvQueryTest::UMyEnvQueryTest(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
// testのコスト?
Cost = EEnvTestCost::Low;
// アイテムは何のパラメーターを受け取れるか。多分。
ValidItemType = UEnvQueryItemType_VectorBase::StaticClass();
}
void UMyEnvQueryTest::RunTest(FEnvQueryInstance& QueryInstance) const
{
// オーナーが居ない
UObject* QueryOwner = QueryInstance.Owner.Get();
if (QueryOwner == nullptr)
{
return;
}
FloatValueMin.BindData(QueryOwner, QueryInstance.QueryID);
float MinThresholdValue = FloatValueMin.GetValue();
FloatValueMax.BindData(QueryOwner, QueryInstance.QueryID);
float MaxThresholdValue = FloatValueMax.GetValue();
// アイテムの数だけブン回す
float score = 0.0f; // いい感じにする
for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It)
{
score += 0.05f; // いい感じにする
It.SetScore(TestPurpose, FilterType, score, MinThresholdValue, MaxThresholdValue);
}
}
FText UMyEnvQueryTest::GetDescriptionTitle() const
{
return Super::GetDescriptionTitle();
}
FText UMyEnvQueryTest::GetDescriptionDetails() const
{
return DescribeFloatTestParams();
}
+ エディターに戻ってCompile.
+ コンパイルに成功したら、EQSのテスト欄に追加されているハズ。
&ref(eqs_create_test03.png,,70%);
* エラー [#l8b25381]
** テストを有効にしても正常に反映されない時 [#u04ec8f4]
Output Logにエラーメッセージ出てる。
&ref(eqs_create_test04.png,,70%);
* Tips [#yd0cdcf7]
** テストの詳細欄にパラメーターを出す [#hac2d047]
+ ヘッダーに下記追加で、「TestValue」項目に「QueryContext」型のQuery変数を表示する
UPROPERTY(EditDefaultsOnly, Category=TestValue)
TSubclassOf<UEnvQueryContext> Query;
+ ソースコード側。
++ コンテキストのヘッダ
#include "EnvironmentQuery/Contexts/EnvQueryContext_Querier.h"
++ コンストラクタに初期化
Query = UEnvQueryContext_Querier::StaticClass();
++ RunTestメソッド内で取得。PrepareContextには各Transform取得メソッドも有るのでQueryInstanceクラス参照。
// クエリからActorのリストを取得する
TArray<AActor*> ContextActors;
if (!QueryInstance.PrepareContext(Query, ContextActors))
{
// Actorが1つも無かった
return;
}
++ こんな感じでブン回せる
for (int32 ContextIndex = 0; ContextIndex < ContextActors.Num(); ContextIndex++)
{
}
&ref(eqs_create_test_tips_param01.png,,70%);